Changeset 2690 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC
- Timestamp:
- 2011-03-15T16:27:46+01:00 (13 years ago)
- Location:
- branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC
- Files:
-
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/C14b/par_c14b.F90
r2528 r2690 5 5 !!====================================================================== 6 6 !! History : 2.0 ! 2008-12 (C. Ethe, G. Madec) revised architecture 7 !!----------------------------------------------------------------------8 !! NEMO/TOP 3.3 , NEMO Consortium (2010)9 !! $Id$10 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)11 7 !!---------------------------------------------------------------------- 12 8 USE par_lobster, ONLY : jp_lobster !: number of tracers in LOBSTER … … 55 51 56 52 ! Starting/ending C14 do-loop indices (N.B. no C14 : jp_c14b0 > jp_c14b1 the do-loop are never done) 57 INTEGER, PUBLIC, PARAMETER :: jp_c14b0 = jp_lb + 1!: First index of C14 tracer58 INTEGER, PUBLIC, PARAMETER :: jp_c14b1 = jp_lb + jp_c14b!: Last index of C14 tracer53 INTEGER, PUBLIC, PARAMETER :: jp_c14b0 = jp_lb + 1 !: First index of C14 tracer 54 INTEGER, PUBLIC, PARAMETER :: jp_c14b1 = jp_lb + jp_c14b !: Last index of C14 tracer 59 55 INTEGER, PUBLIC, PARAMETER :: jp_c14b0_2d = jp_lb_2d + 1 !: First index of C14 tracer 60 56 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_2d = jp_lb_2d + jp_c14b_2d !: Last index of C14 tracer … … 64 60 INTEGER, PUBLIC, PARAMETER :: jp_c14b1_trd = jp_lb_trd + jp_c14b_trd !: Last index of C14 tracer 65 61 62 !!---------------------------------------------------------------------- 63 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 64 !! $Id$ 65 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 66 66 !!====================================================================== 67 67 END MODULE par_c14b -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/C14b/trcini_c14b.F90
r2643 r2690 4 4 !! TOP : initialisation of the C14 bomb tracer 5 5 !!====================================================================== 6 !! History : Original ! 2005-10 (Z. Lachkar)7 !! 2.0 ! 2007-12 (C. Ethe)6 !! History : 1.0 ! 2005-10 (Z. Lachkar) Original code 7 !! 2.0 ! 2007-12 (C. Ethe) 8 8 !!---------------------------------------------------------------------- 9 9 #if defined key_c14b … … 23 23 PUBLIC trc_ini_c14b ! called by trcini.F90 module 24 24 25 INTEGER :: & ! With respect to data file !! 26 jpybeg = 1765 , & !: starting year for C14 27 jpyend = 2002 !: ending year for C14 28 29 INTEGER :: & 30 nrec , & ! number of year in CO2 Concentrations file 31 nmaxrec 32 33 INTEGER :: inum1, inum2 ! unit number 34 35 REAL(wp) :: & 36 ys40 = -40. , & ! 40 degrees south 37 ys20 = -20. , & ! 20 degrees south 38 yn20 = 20. , & ! 20 degrees north 39 yn40 = 40. ! 40 degrees north 40 41 !!--------------------------------------------------------------------- 25 ! ! With respect to data file !! 26 INTEGER :: jpybeg = 1765 ! starting year for C14 27 INTEGER :: jpyend = 2002 ! ending year for C14 28 INTEGER :: nrec ! number of year in CO2 Concentrations file 29 INTEGER :: nmaxrec 30 INTEGER :: inum1, inum2 ! unit number 31 32 REAL(wp) :: ys40 = -40. ! 40 degrees south 33 REAL(wp) :: ys20 = -20. ! 20 degrees south 34 REAL(wp) :: yn20 = 20. ! 20 degrees north 35 REAL(wp) :: yn40 = 40. ! 40 degrees north 36 37 !!---------------------------------------------------------------------- 42 38 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 43 39 !! $Id$ 44 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 45 !!---------------------------------------------------------------------- 46 40 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 41 !!---------------------------------------------------------------------- 47 42 CONTAINS 48 43 … … 58 53 !!---------------------------------------------------------------------- 59 54 60 CALL c14b_alloc() ! Allocate CFC arrays 55 ! ! Allocate C14b arrays 56 IF( trc_sms_c14b_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trc_ini_c14b : unable to allocate C14b arrays' ) 61 57 62 58 CALL trc_ctl_c14b ! Control consitency … … 69 65 ! Initialization of boundaries conditions 70 66 ! --------------------------------------- 71 qtr_c14(:,:) = 0. e067 qtr_c14(:,:) = 0._wp 72 68 73 69 ! Initialization of qint in case of no restart … … 78 74 WRITE(numout,*) 'Initialization de qint ; No restart : qint equal zero ' 79 75 ENDIF 80 trn (:,:,:,jpc14) = 0. e081 qint_c14(:,: ) = 0. e076 trn (:,:,:,jpc14) = 0._wp 77 qint_c14(:,: ) = 0._wp 82 78 ENDIF 83 79 … … 156 152 fareaz(ji,jj,3) = 0. 157 153 ENDIF 158 END DO 159 END DO 160 154 END DO 155 END DO 161 156 ! 162 157 IF(lwp) WRITE(numout,*) 'Initialization of C14 bomb tracer done' 163 158 IF(lwp) WRITE(numout,*) ' ' 164 159 ! 165 160 END SUBROUTINE trc_ini_c14b 166 161 167 SUBROUTINE c14b_alloc 168 !!---------------------------------------------------------------------- 169 !! *** ROUTINE c14b_alloc *** 170 !! 171 !! ** Purpose : Allocate all the dynamic arrays of C14b 172 !!---------------------------------------------------------------------- 173 174 ! ! Allocate C14b arrays 175 IF( trc_sms_c14b_alloc() /= 0 ) & 176 & CALL ctl_stop( 'STOP', 'trc_ini_c14b : unable to allocate C14b arrays' ) 177 ! 178 END SUBROUTINE c14b_alloc 179 162 180 163 SUBROUTINE trc_ctl_c14b 181 164 !!---------------------------------------------------------------------- … … 192 175 ! Check number of tracers 193 176 ! ----------------------- 194 IF( jp_c14b > 1) CALL ctl_stop( ' Change jp_c14b to be equal 1 in par_c14b.F90' )177 IF( jp_c14b > 1) CALL ctl_stop( ' Change jp_c14b to be equal 1 in par_c14b.F90' ) 195 178 196 179 ! Check tracer names 197 180 ! ------------------ 198 IF 199 200 181 IF( ctrcnm(jpc14) /= 'C14B' ) THEN 182 ctrcnm(jpc14) = 'C14B' 183 ctrcnl(jpc14) = 'Bomb C14 concentration' 201 184 ENDIF 202 185 … … 210 193 ! ------------------ 211 194 IF( ctrcun(jpc14) /= 'ration' ) THEN 212 ctrcun(jpc14) = 'ration'195 ctrcun(jpc14) = 'ration' 213 196 IF(lwp) THEN 214 197 CALL ctl_warn( ' we force tracer unit' ) … … 219 202 ! 220 203 END SUBROUTINE trc_ctl_c14b 204 221 205 #else 222 206 !!---------------------------------------------------------------------- -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/C14b/trcsms_c14b.F90
r2643 r2690 13 13 !! 'key_c14b' Bomb C14 tracer 14 14 !!---------------------------------------------------------------------- 15 !! trc_sms_c14b 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! Ocean variables18 USE par_trc ! TOP parameters19 USE trc ! TOP variables15 !! trc_sms_c14b : compute and add C14 suface forcing to C14 trends 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! Ocean variables 18 USE par_trc ! TOP parameters 19 USE trc ! TOP variables 20 20 USE trdmod_oce 21 21 USE trdmod_trc 22 USE iom 22 USE iom ! I/O library 23 23 24 24 IMPLICIT NONE 25 25 PRIVATE 26 26 27 !! * Routine accessibility28 27 PUBLIC trc_sms_c14b ! called in trcsms.F90 29 PUBLIC trc_sms_c14b_alloc ! called in nemogcm.F90 30 31 !! * Module variables 28 PUBLIC trc_sms_c14b_alloc ! called in trcini_c14b.F90 29 32 30 INTEGER , PUBLIC, PARAMETER :: jpmaxrec = 240 ! temporal parameter 33 31 INTEGER , PUBLIC, PARAMETER :: jpmaxrec2 = 2 * jpmaxrec ! … … 39 37 INTEGER , PUBLIC :: nyear_beg ! initial year (aa) 40 38 41 REAL(wp), PUBLIC, DIMENSION(jpmaxrec,jpzon) :: bomb!: C14 atm data (3 zones)42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fareaz!: Spatial Interpolation Factors43 REAL(wp), PUBLIC, DIMENSION(jpmaxrec2) :: spco2!: Atmospheric CO239 REAL(wp), PUBLIC, DIMENSION(jpmaxrec,jpzon) :: bomb !: C14 atm data (3 zones) 40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: fareaz !: Spatial Interpolation Factors 41 REAL(wp), PUBLIC, DIMENSION(jpmaxrec2) :: spco2 !: Atmospheric CO2 44 42 45 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qtr_c14 !: flux at surface 46 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qint_c14 !: cumulative flux 47 48 REAL(wp) :: xlambda, xdecay, xaccum ! C14 decay coef. 49 50 REAL(wp) :: xconv1 = 1.0 ! conversion from to 51 REAL(wp) :: xconv2 = 0.01/3600. ! conversion from cm/h to m/s: 52 REAL(wp) :: xconv3 = 1.0e+3 ! conversion from mol/l/atm to mol/m3/atm 53 54 !! * Substitutions 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qtr_c14 !: flux at surface 44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: qint_c14 !: cumulative flux 45 46 REAL(wp) :: xlambda, xdecay, xaccum ! C14 decay coef. 47 REAL(wp) :: xconv1 = 1._wp ! conversion from to 48 REAL(wp) :: xconv2 = 0.01_wp / 3600._wp ! conversion from cm/h to m/s: 49 REAL(wp) :: xconv3 = 1.e+3_wp ! conversion from mol/l/atm to mol/m3/atm 50 51 !! * Substitutions 55 52 # include "top_substitute.h90" 56 53 57 !!---------------------------------------------------------------------- 58 !! TOP 1.0 , LOCEAN-IPSL (2005) 59 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/trcc14bomb.F90,v 1.2 2005/11/14 16:42:43 opalod Exp $ 60 !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt 61 !!---------------------------------------------------------------------- 62 54 !!---------------------------------------------------------------------- 55 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 56 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/SMS/trcc14bomb.F90,v 1.2 2005/11/14 16:42:43 opalod Exp $ 57 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 58 !!---------------------------------------------------------------------- 63 59 CONTAINS 64 60 65 66 SUBROUTINE trc_sms_c14b( kt ) 67 !!---------------------------------------------------------------------- 68 !! *** ROUTINE trc_sms_c14b *** 69 !! 70 !! ** Purpose : Compute the surface boundary contition on C14bomb 71 !! passive tracer associated with air-mer fluxes and add it to 72 !! the general trend of tracers equations. 73 !! 74 !! ** Original comments from J. Orr : 75 !! 76 !! Calculates the input of Bomb C-14 to the surface layer of OPA 77 !! 78 !! James Orr, LMCE, 28 October 1992 79 !! 80 !! Initial approach mimics that of Toggweiler, Dixon, & Bryan (1989) 81 !! (hereafter referred to as TDB) with constant gas exchange, 82 !! although in this case, a perturbation approach is used for 83 !! bomb-C14 so that both the ocean and atmosphere begin at zero. 84 !! This saves tremendous amounts of computer time since no 85 !! equilibrum run is first required (i.e., for natural C-14). 86 !! Note: Many sensitivity tests can be run with this approach and 87 !! one never has to make a run for natural C-14; otherwise, 88 !! a run for natural C-14 must be run each time that one 89 !! changes a model parameter! 90 !! 91 !! 92 !! 19 August 1993: Modified to consider Atmospheric C-14 fom IPCC. 93 !! That is, the IPCC has provided a C-14 atmospheric record (courtesy 94 !! of Martin Heimann) for model calibration. This model spans from 95 !! preindustrial times to present, in a format different than that 96 !! given by TDB. It must be converted to the ORR C-14 units used 97 !! here, although in this case, the perturbation includes not only 98 !! bomb C-14 but changes due to the Suess effect. 99 !! 100 !!---------------------------------------------------------------------- 101 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 102 USE wrk_nemo, ONLY: zatmbc14 => wrk_2d_1 103 USE wrk_nemo, ONLY: zw3d => wrk_3d_1 104 !! * Arguments 105 INTEGER, INTENT( in ) :: kt ! ocean time-step index 106 107 !! * Local declarations 108 INTEGER :: ji, jj, jk, jz ! dummy loop indices 109 110 INTEGER :: iyear_beg, iyear_beg1, iyear_end1 111 INTEGER :: iyear_beg2, iyear_end2 112 INTEGER :: imonth1, im1, in1 113 INTEGER :: imonth2, im2, in2 114 115 REAL(wp), DIMENSION(jpzon) :: zonbc14 !: time interp atm C14 116 REAL(wp) :: zpco2at !: time interp atm C02 117 118 REAL(wp) :: zt, ztp, zsk !: dummy variables 119 REAL(wp) :: zsol !: solubility 120 REAL(wp) :: zsch !: schmidt number 121 REAL(wp) :: zv2 !: wind speed ( square) 122 REAL(wp) :: zpv !: piston velocity 123 REAL(wp) :: zdemi, ztra 124 !!---------------------------------------------------------------------- 125 126 IF( ( wrk_in_use(2, 1) ) .OR. ( wrk_in_use(3, 1) ) ) THEN 127 CALL ctl_stop('trc_sms_c14b : requested workspace arrays unavailable.') 128 RETURN 129 END IF 130 131 IF( kt == nit000 ) THEN 132 ! Computation of decay coeffcient 133 zdemi = 5730. 61 SUBROUTINE trc_sms_c14b( kt ) 62 !!---------------------------------------------------------------------- 63 !! *** ROUTINE trc_sms_c14b *** 64 !! 65 !! ** Purpose : Compute the surface boundary contition on C14bomb 66 !! passive tracer associated with air-mer fluxes and add it to 67 !! the general trend of tracers equations. 68 !! 69 !! ** Original comments from J. Orr : 70 !! 71 !! Calculates the input of Bomb C-14 to the surface layer of OPA 72 !! 73 !! James Orr, LMCE, 28 October 1992 74 !! 75 !! Initial approach mimics that of Toggweiler, Dixon, & Bryan (1989) 76 !! (hereafter referred to as TDB) with constant gas exchange, 77 !! although in this case, a perturbation approach is used for 78 !! bomb-C14 so that both the ocean and atmosphere begin at zero. 79 !! This saves tremendous amounts of computer time since no 80 !! equilibrum run is first required (i.e., for natural C-14). 81 !! Note: Many sensitivity tests can be run with this approach and 82 !! one never has to make a run for natural C-14; otherwise, 83 !! a run for natural C-14 must be run each time that one 84 !! changes a model parameter! 85 !! 86 !! 87 !! 19 August 1993: Modified to consider Atmospheric C-14 fom IPCC. 88 !! That is, the IPCC has provided a C-14 atmospheric record (courtesy 89 !! of Martin Heimann) for model calibration. This model spans from 90 !! preindustrial times to present, in a format different than that 91 !! given by TDB. It must be converted to the ORR C-14 units used 92 !! here, although in this case, the perturbation includes not only 93 !! bomb C-14 but changes due to the Suess effect. 94 !! 95 !!---------------------------------------------------------------------- 96 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 97 USE wrk_nemo, ONLY: zatmbc14 => wrk_2d_1 98 USE wrk_nemo, ONLY: zw3d => wrk_3d_1 99 ! 100 INTEGER, INTENT(in) :: kt ! ocean time-step index 101 ! 102 INTEGER :: ji, jj, jk, jz ! dummy loop indices 103 INTEGER :: iyear_beg , iyear_beg1, iyear_end1 104 INTEGER :: iyear_beg2, iyear_end2 105 INTEGER :: imonth1, im1, in1 106 INTEGER :: imonth2, im2, in2 107 REAL(wp), DIMENSION(jpzon) :: zonbc14 !: time interp atm C14 108 REAL(wp) :: zpco2at !: time interp atm C02 109 REAL(wp) :: zt, ztp, zsk ! dummy variables 110 REAL(wp) :: zsol ! solubility 111 REAL(wp) :: zsch ! schmidt number 112 REAL(wp) :: zv2 ! wind speed ( square) 113 REAL(wp) :: zpv ! piston velocity 114 REAL(wp) :: zdemi, ztra 115 !!---------------------------------------------------------------------- 116 117 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 1) ) THEN 118 CALL ctl_stop('trc_sms_c14b : requested workspace arrays unavailable') ; RETURN 119 ENDIF 120 121 IF( kt == nit000 ) THEN ! Computation of decay coeffcient 122 zdemi = 5730._wp 134 123 xlambda = LOG(2.) / zdemi / ( nyear_len(1) * rday ) 135 124 xdecay = EXP( - xlambda * rdt ) 136 xaccum = 1. 0- xdecay125 xaccum = 1._wp - xdecay 137 126 ENDIF 138 127 … … 204 193 ! (zonmean), computes area-weighted mean to give the atmospheric C-14 205 194 ! ---------------------------------------------------------------- 206 DO jj = 1, jpj 207 DO ji = 1, jpi 208 zatmbc14(ji,jj) = zonbc14(1) * fareaz(ji,jj,1) & 209 & + zonbc14(2) * fareaz(ji,jj,2) & 210 & + zonbc14(3) * fareaz(ji,jj,3) 211 END DO 212 END DO 195 zatmbc14(:,:) = zonbc14(1) * fareaz(:,:,1) & 196 & + zonbc14(2) * fareaz(:,:,2) & 197 & + zonbc14(3) * fareaz(:,:,3) 213 198 214 199 ! time interpolation of CO2 concentrations to it time step … … 216 201 & + spco2(iyear_end2) * FLOAT( in2 ) ) / 6. 217 202 218 IF 203 IF(lwp) THEN 219 204 WRITE(numout, *) 'time : ', kt, ' CO2 year begin/end :',iyear_beg2,'/',iyear_end2, & 220 205 & ' CO2 concen : ',zpco2at … … 236 221 zsol = EXP( -60.2409 + 93.4517 / ztp + 23.3585 * LOG( ztp ) + zsk * tsn(ji,jj,1,jp_sal) ) 237 222 ! convert solubilities [mol/(l * atm)] -> [mol/(m^3 * ppm)] 238 zsol = zsol * 1. 0e-03223 zsol = zsol * 1.e-03 239 224 ELSE 240 zsol = 0. 225 zsol = 0._wp 241 226 ENDIF 242 227 … … 305 290 CALL iom_put( "fdecay" , zw3d ) 306 291 #endif 307 IF( l_trdtrc ) THEN 308 CALL trd_mod_trc( tra(:,:,:,jpc14), jpc14, jptra_trd_sms, kt ) ! save trends 309 END IF 310 311 IF( ( wrk_not_released(2, 1)) .OR. ( wrk_not_released(3, 1) ) ) & 312 & CALL ctl_stop('trc_sms_c14b : failed to release workspace arrays.') 313 314 END SUBROUTINE trc_sms_c14b 315 316 INTEGER FUNCTION trc_sms_c14b_alloc() 317 !!---------------------------------------------------------------------- 318 !! *** ROUTINE trc_sms_c14b_alloc *** 319 !!---------------------------------------------------------------------- 320 321 ALLOCATE( fareaz(jpi,jpj ,jpzon), & 322 & qtr_c14(jpi,jpj) , & 323 & qint_c14(jpi,jpj) , STAT=trc_sms_c14b_alloc ) 324 325 IF( trc_sms_c14b_alloc /= 0 ) CALL ctl_warn('trc_sms_c14b_alloc : failed to allocate arrays.') 326 327 END FUNCTION trc_sms_c14b_alloc 292 IF( l_trdtrc ) CALL trd_mod_trc( tra(:,:,:,jpc14), jpc14, jptra_trd_sms, kt ) ! save trends 293 294 IF( wrk_not_released(2, 1) .OR. & 295 wrk_not_released(3, 1) ) CALL ctl_stop('trc_sms_c14b : failed to release workspace arrays') 296 ! 297 END SUBROUTINE trc_sms_c14b 298 299 300 INTEGER FUNCTION trc_sms_c14b_alloc() 301 !!---------------------------------------------------------------------- 302 !! *** ROUTINE trc_sms_c14b_alloc *** 303 !!---------------------------------------------------------------------- 304 ALLOCATE( fareaz (jpi,jpj ,jpzon) , & 305 & qtr_c14 (jpi,jpj) , & 306 & qint_c14(jpi,jpj) , STAT=trc_sms_c14b_alloc ) 307 ! 308 IF( trc_sms_c14b_alloc /= 0 ) CALL ctl_warn('trc_sms_c14b_alloc: failed to allocate arrays') 309 ! 310 END FUNCTION trc_sms_c14b_alloc 311 328 312 #else 329 330 331 313 !!---------------------------------------------------------------------- 314 !! Default option Dummy module 315 !!---------------------------------------------------------------------- 332 316 CONTAINS 333 SUBROUTINE trc_sms_c14b( kt ) ! Empty routine334 WRITE(*,*) 'trc_freons: You should not have seen this print! error?', kt335 END SUBROUTINE trc_sms_c14b317 SUBROUTINE trc_sms_c14b( kt ) ! Empty routine 318 WRITE(*,*) 'trc_freons: You should not have seen this print! error?', kt 319 END SUBROUTINE trc_sms_c14b 336 320 #endif 337 321 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/CFC/trcini_cfc.F90
r2643 r2690 33 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 34 !!---------------------------------------------------------------------- 35 36 35 CONTAINS 37 36 … … 45 44 !!---------------------------------------------------------------------- 46 45 INTEGER :: ji, jj, jn, jl, jm, js 47 REAL(wp) :: zyy ,zyd46 REAL(wp) :: zyy, zyd 48 47 !!---------------------------------------------------------------------- 49 48 … … 52 51 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~' 53 52 54 CALL cfc_alloc() ! Allocate CFC arrays 53 ! ! Allocate CFC arrays 54 IF( trc_sms_cfc_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trc_ini_cfc: unable to allocate CFC arrays' ) 55 55 56 56 57 57 ! Initialization of boundaries conditions 58 58 ! --------------------------------------- 59 xphem (:,:) = 0. e060 p_cfc(:,:,:) = 0. e059 xphem (:,:) = 0._wp 60 p_cfc(:,:,:) = 0._wp 61 61 62 62 ! Initialization of qint in case of no restart 63 63 !---------------------------------------------- 64 qtr_cfc(:,:,:) = 0. e064 qtr_cfc(:,:,:) = 0._wp 65 65 IF( .NOT. ln_rsttr ) THEN 66 66 IF(lwp) THEN … … 68 68 WRITE(numout,*) 'Initialization de qint ; No restart : qint equal zero ' 69 69 ENDIF 70 qint_cfc(:,:,:) = 0. e070 qint_cfc(:,:,:) = 0._wp 71 71 DO jl = 1, jp_cfc 72 72 jn = jp_cfc0 + jl - 1 73 trn (:,:,:,jn) = 0.e073 trn(:,:,:,jn) = 0._wp 74 74 END DO 75 75 ENDIF … … 117 117 WRITE(numout,*) ' Year p11HN p11HS p12HN p12HS ' 118 118 DO jn = 30, 100 119 WRITE(numout, '( 1I4, 4F9.2)') & 120 & jn, p_cfc(jn,1,1), p_cfc(jn,2,1), p_cfc(jn,1,2), p_cfc(jn,2,2) 119 WRITE(numout, '( 1I4, 4F9.2)') jn, p_cfc(jn,1,1), p_cfc(jn,2,1), p_cfc(jn,1,2), p_cfc(jn,2,2) 121 120 END DO 122 121 ENDIF … … 136 135 END DO 137 136 ! 138 139 137 IF(lwp) WRITE(numout,*) 'Initialization of CFC tracers done' 140 138 IF(lwp) WRITE(numout,*) ' ' 141 139 ! 142 140 END SUBROUTINE trc_ini_cfc 143 144 SUBROUTINE cfc_alloc145 !!----------------------------------------------------------------------146 !! *** ROUTINE cfc_alloc ***147 !!148 !! ** Purpose : Allocate all the dynamic arrays of CFC149 !!----------------------------------------------------------------------150 151 ! ! Allocate CFC arrays152 IF( trc_sms_cfc_alloc() /= 0 ) &153 & CALL ctl_stop( 'STOP', 'trc_ini_cfc : unable to allocate CFC arrays' )154 !155 END SUBROUTINE cfc_alloc156 141 157 142 #else -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/CFC/trcsms_cfc.F90
r2643 r2690 4 4 !! TOP : CFC main model 5 5 !!====================================================================== 6 !! History : -! 1999-10 (JC. Dutay) original code7 !! 1.0 ! 2004-03(C. Ethe) free form + modularity8 !! 6 !! History : OPA ! 1999-10 (JC. Dutay) original code 7 !! NEMO 1.0 ! 2004-03 (C. Ethe) free form + modularity 8 !! 2.0 ! 2007-12 (C. Ethe, G. Madec) reorganisation 9 9 !!---------------------------------------------------------------------- 10 10 #if defined key_cfc … … 12 12 !! 'key_cfc' CFC tracers 13 13 !!---------------------------------------------------------------------- 14 !! trc_sms_cfc 15 !! trc_cfc_cst : sets constants for CFC surface forcing computation16 !!---------------------------------------------------------------------- 17 USE oce_trc ! Ocean variables18 USE par_trc ! TOP parameters19 USE trc ! TOP variables14 !! trc_sms_cfc : compute and add CFC suface forcing to CFC trends 15 !! trc_cfc_cst : sets constants for CFC surface forcing computation 16 !!---------------------------------------------------------------------- 17 USE oce_trc ! Ocean variables 18 USE par_trc ! TOP parameters 19 USE trc ! TOP variables 20 20 USE trdmod_oce 21 21 USE trdmod_trc 22 USE iom 22 USE iom ! I/O library 23 23 24 24 IMPLICIT NONE … … 26 26 27 27 PUBLIC trc_sms_cfc ! called in ??? 28 PUBLIC trc_sms_cfc_alloc ! called in nemogcm.F9028 PUBLIC trc_sms_cfc_alloc ! called in trcini_cfc.F90 29 29 30 30 INTEGER , PUBLIC, PARAMETER :: jpyear = 150 ! temporal parameter … … 55 55 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 56 56 !! $Id$ 57 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 58 !!---------------------------------------------------------------------- 59 57 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 58 !!---------------------------------------------------------------------- 60 59 CONTAINS 61 62 60 63 61 SUBROUTINE trc_sms_cfc( kt ) … … 77 75 !! CFC concentration in pico-mol/m3 78 76 !!---------------------------------------------------------------------- 79 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 80 USE wrk_nemo, ONLY: ztrcfc => wrk_3d_1 ! use for CFC sms trend 81 !! 82 INTEGER, INTENT( in ) :: kt ! ocean time-step index 83 !! 84 INTEGER :: ji, jj, jn, jl, jm, js 85 INTEGER :: iyear_beg, iyear_end 86 INTEGER :: im1, im2 87 77 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 78 USE wrk_nemo, ONLY: ztrcfc => wrk_3d_1 ! use for CFC sms trend 79 ! 80 INTEGER, INTENT(in) :: kt ! ocean time-step index 81 ! 82 INTEGER :: ji, jj, jn, jl, jm, js 83 INTEGER :: iyear_beg, iyear_end 84 INTEGER :: im1, im2 88 85 REAL(wp) :: ztap, zdtap 89 86 REAL(wp) :: zt1, zt2, zt3, zv2 … … 93 90 REAL(wp) :: zca_cfc ! concentration at equilibrium 94 91 REAL(wp) :: zak_cfc ! transfert coefficients 95 96 REAL(wp), DIMENSION(jphem,jp_cfc) :: zpatm ! atmospheric function 97 !!---------------------------------------------------------------------- 98 92 REAL(wp), DIMENSION(jphem,jp_cfc) :: zpatm ! atmospheric function 93 !!---------------------------------------------------------------------- 94 ! 99 95 IF( wrk_in_use(3, 1) ) THEN 100 CALL ctl_stop('trc_sms_cfc : requested workspace array unavailable.') 101 RETURN 102 END IF 96 CALL ctl_stop('trc_sms_cfc: requested workspace array unavailable') ; RETURN 97 ENDIF 103 98 104 99 IF( kt == nit000 ) CALL trc_cfc_cst … … 199 194 END DO 200 195 END IF 201 202 IF( wrk_not_released(3, 1) ) CALL ctl_stop('trc_sms_cfc : failed to release workspace array.')203 196 ! 197 IF( wrk_not_released(3, 1) ) CALL ctl_stop('trc_sms_cfc: failed to release workspace array') 198 ! 204 199 END SUBROUTINE trc_sms_cfc 200 205 201 206 202 SUBROUTINE trc_cfc_cst … … 211 207 !!--------------------------------------------------------------------- 212 208 213 214 ! coefficient for CFC11 215 !---------------------- 216 217 ! Solubility 218 soa(1,1) = -229.9261 219 soa(2,1) = 319.6552 220 soa(3,1) = 119.4471 221 soa(4,1) = -1.39165 222 223 sob(1,1) = -0.142382 224 sob(2,1) = 0.091459 225 sob(3,1) = -0.0157274 226 227 ! Schmidt number 228 sca(1,1) = 3501.8 229 sca(2,1) = -210.31 230 sca(3,1) = 6.1851 231 sca(4,1) = -0.07513 232 233 ! coefficient for CFC12 234 !---------------------- 235 236 ! Solubility 237 soa(1,2) = -218.0971 238 soa(2,2) = 298.9702 239 soa(3,2) = 113.8049 240 soa(4,2) = -1.39165 241 242 sob(1,2) = -0.143566 243 sob(2,2) = 0.091015 244 sob(3,2) = -0.0153924 245 246 ! schmidt number 247 sca(1,2) = 3845.4 248 sca(2,2) = -228.95 249 sca(3,2) = 6.1908 250 sca(4,2) = -0.067430 209 ! coefficient for CFC11 210 !---------------------- 211 212 ! Solubility 213 soa(1,1) = -229.9261 214 soa(2,1) = 319.6552 215 soa(3,1) = 119.4471 216 soa(4,1) = -1.39165 217 218 sob(1,1) = -0.142382 219 sob(2,1) = 0.091459 220 sob(3,1) = -0.0157274 221 222 ! Schmidt number 223 sca(1,1) = 3501.8 224 sca(2,1) = -210.31 225 sca(3,1) = 6.1851 226 sca(4,1) = -0.07513 227 228 ! coefficient for CFC12 229 !---------------------- 230 231 ! Solubility 232 soa(1,2) = -218.0971 233 soa(2,2) = 298.9702 234 soa(3,2) = 113.8049 235 soa(4,2) = -1.39165 236 237 sob(1,2) = -0.143566 238 sob(2,2) = 0.091015 239 sob(3,2) = -0.0153924 240 241 ! schmidt number 242 sca(1,2) = 3845.4 243 sca(2,2) = -228.95 244 sca(3,2) = 6.1908 245 sca(4,2) = -0.067430 251 246 252 247 END SUBROUTINE trc_cfc_cst 253 248 249 254 250 INTEGER FUNCTION trc_sms_cfc_alloc() 255 251 !!---------------------------------------------------------------------- 256 252 !! *** ROUTINE trc_sms_cfc_alloc *** 257 253 !!---------------------------------------------------------------------- 258 259 ALLOCATE( xphem(jpi,jpj) , & 260 & qtr_cfc(jpi,jpj,jp_cfc) , & 261 & qint_cfc(jpi,jpj,jp_cfc), & 262 & STAT=trc_sms_cfc_alloc ) 263 254 ALLOCATE( xphem (jpi,jpj) , & 255 & qtr_cfc (jpi,jpj,jp_cfc) , & 256 & qint_cfc(jpi,jpj,jp_cfc) , STAT=trc_sms_cfc_alloc ) 257 ! 264 258 IF( trc_sms_cfc_alloc /= 0 ) CALL ctl_warn('trc_sms_cfc_alloc : failed to allocate arrays.') 265 259 ! 266 260 END FUNCTION trc_sms_cfc_alloc 267 261 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/LOBSTER/sms_lobster.F90
r2643 r2690 4 4 !! TOP : LOBSTER 1 Source Minus Sink variables 5 5 !!---------------------------------------------------------------------- 6 !! History : - ! 1999-09(M. Levy) original code7 !! - ! 2000-12(O. Aumont, E. Kestenare) add sediment8 !! 1.0 ! 2005-10(C. Ethe) F909 !! 1.0! 2005-03 (A-S Kremeur) add fphylab, fzoolab, fdetlab, fdbod10 !! 11 !! 6 !! History : OPA ! 1999-09 (M. Levy) original code 7 !! - ! 2000-12 (O. Aumont, E. Kestenare) add sediment 8 !! NEMO 1.0 ! 2005-10 (C. Ethe) F90 9 !! - ! 2005-03 (A-S Kremeur) add fphylab, fzoolab, fdetlab, fdbod 10 !! - ! 2005-06 (A-S Kremeur) add sedpocb, sedpocn, sedpoca 11 !! 2.0 ! 2007-04 (C. Deltel, G. Madec) Free form and modules 12 12 !!---------------------------------------------------------------------- 13 13 #if defined key_lobster … … 15 15 !! 'key_lobster' LOBSTER model 16 16 !!---------------------------------------------------------------------- 17 USE par_oce 18 USE par_trc 17 USE par_oce ! ocean parameters 18 USE par_trc ! passive tracer parameters 19 USE lib_mpp ! MPP library 19 20 20 21 IMPLICIT NONE 21 22 PUBLIC 23 24 PUBLIC sms_lobster_alloc ! called in trcini_lobster.F90 22 25 23 26 !! biological parameters … … 73 76 !! Optical parameters 74 77 !! ------------------ 75 REAL(wp) :: xkr0 76 REAL(wp) :: xkg0 77 REAL(wp) :: xkrp 78 REAL(wp) :: xkgp 79 REAL(wp) :: xlr 80 REAL(wp) :: xlg 81 REAL(wp) :: rpig 78 REAL(wp) :: xkr0 !: water coefficient absorption in red (NAMELIST) 79 REAL(wp) :: xkg0 !: water coefficient absorption in green (NAMELIST) 80 REAL(wp) :: xkrp !: pigment coefficient absorption in red (NAMELIST) 81 REAL(wp) :: xkgp !: pigment coefficient absorption in green (NAMELIST) 82 REAL(wp) :: xlr !: exposant for pigment absorption in red (NAMELIST) 83 REAL(wp) :: xlg !: exposant for pigment absorption in green (NAMELIST) 84 REAL(wp) :: rpig !: chla/chla+phea ratio (NAMELIST) 82 85 83 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: neln!: number of levels in the euphotic layer84 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xze!: euphotic layer depth85 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpar!: par (photosynthetic available radiation)86 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:,:) :: neln !: number of levels in the euphotic layer 87 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: xze !: euphotic layer depth 88 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xpar !: par (photosynthetic available radiation) 86 89 87 90 !! Sediment parameters … … 91 94 REAL(wp) :: areacot !: ??? 92 95 93 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dminl!: fraction of sinking POC released in sediments94 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dmin3!: fraction of sinking POC released at each level96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: dminl !: fraction of sinking POC released in sediments 97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: dmin3 !: fraction of sinking POC released at each level 95 98 96 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpocb!: mass of POC in sediments97 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpocn!: mass of POC in sediments98 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpoca!: mass of POC in sediments99 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpocb !: mass of POC in sediments 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpocn !: mass of POC in sediments 101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: sedpoca !: mass of POC in sediments 99 102 100 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: fbod!: rapid sinking particles101 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: cmask!: ???103 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: fbod !: rapid sinking particles 104 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) :: cmask !: ??? 102 105 103 106 !!---------------------------------------------------------------------- 104 107 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 105 108 !! $Id$ 106 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)109 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 107 110 !!---------------------------------------------------------------------- 108 111 CONTAINS … … 112 115 !! *** ROUTINE sms_lobster_alloc *** 113 116 !!---------------------------------------------------------------------- 114 USE lib_mpp, ONLY: ctl_warn ! MPP library 115 INTEGER :: ierr(3) ! Local variables 116 !!---------------------------------------------------------------------- 117 118 ierr(:) = 0 119 !* Biological parameters 120 ALLOCATE( remdmp(jpk,jp_lobster), STAT=ierr(1) ) 121 122 !* Optical parameters 123 ALLOCATE( neln(jpi,jpj) , xze(jpi,jpj), & 124 & xpar(jpi,jpj,jpk) , STAT=ierr(2) ) 125 126 !* Sediment parameters 127 ALLOCATE( dminl(jpi,jpj) , dmin3(jpi,jpj,jpk), & 128 & sedpocb(jpi,jpj), sedpocn(jpi,jpj) , sedpoca(jpi,jpj), & 129 & fbod(jpi,jpj) , cmask(jpi,jpj) , STAT=ierr(3) ) 130 131 sms_lobster_alloc = MAXVAL( ierr ) 132 133 IF( sms_lobster_alloc /= 0 ) CALL ctl_warn('sms_lobster_alloc : failed to allocate arrays.') 134 117 ! 118 ALLOCATE( & 119 !* Biological parameters 120 & remdmp(jpk,jp_lobster) , & 121 !* Optical parameters 122 & neln (jpi,jpj) , xze (jpi,jpj) , xpar(jpi,jpj,jpk) & 123 !* Sediment parameters 124 & dminl (jpi,jpj) , dmin3 (jpi,jpj,jpk) , & 125 & sedpocb(jpi,jpj) , sedpocn(jpi,jpj) , sedpoca(jpi,jpj) , & 126 & fbod (jpi,jpj) , cmask (jpi,jpj) , STAT=sms_lobster_alloc ) 127 ! 128 IF( lk_mpp ) CALL mpp_sum ( sms_lobster_alloc ) 129 IF( sms_lobster_alloc /= 0 ) CALL ctl_warn('sms_lobster_alloc: failed to allocate arrays') 130 ! 135 131 END FUNCTION sms_lobster_alloc 136 132 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/LOBSTER/trcini_lobster.F90
r2643 r2690 4 4 !! TOP : initialisation of the LOBSTER biological model 5 5 !!====================================================================== 6 !! History : -! 1999-09 (M. Levy) Original code6 !! History : OPA ! 1999-09 (M. Levy) Original code 7 7 !! - ! 2000-12 (0. Aumont, E. Kestenare) add sediment 8 !! 8 !! NEMO 1.0 ! 2004-03 (C. Ethe) Modularity 9 9 !! - ! 2005-03 (O. Aumont, A. El Moussaoui) F90 10 10 !! History : 2.0 ! 2007-12 (C. Ethe, G. Madec) from trcini.lobster1.h90 … … 31 31 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 32 32 !! $Id$ 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 !!---------------------------------------------------------------------- 35 33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 34 !!---------------------------------------------------------------------- 36 35 CONTAINS 37 36 … … 41 40 !! ** purpose : specific initialisation for LOBSTER bio-model 42 41 !!---------------------------------------------------------------------- 43 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released44 USE wrk_nemo, ONLY: zrro => wrk_2d_1, zdm0 => wrk_3d_142 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 43 USE wrk_nemo, ONLY: zrro => wrk_2d_1 , zdm0 => wrk_3d_1 45 44 !! 46 45 INTEGER :: ji, jj, jk, jn 47 46 REAL(wp) :: ztest, zfluo, zfluu 48 47 !!---------------------------------------------------------------------- 48 ! 49 IF( wrk_in_use(2, 1) .OR. wrk_in_use(3, 1) ) THEN 50 CALL ctl_stop('trc_ini_lobster: requested workspace arrays unavailable') ; RETURN 51 ENDIF 49 52 50 53 IF(lwp) WRITE(numout,*) … … 52 55 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~~' 53 56 54 55 CALL lobster_alloc() ! Allocate LOBSTER arrays 56 57 IF( ( wrk_in_use(2, 1) ) .OR. ( wrk_in_use(3, 1) ) ) THEN 58 CALL ctl_stop('trc_ini_lobster : requested workspace arrays unavailable.') ; RETURN 59 ENDIF 57 ! ! Allocate LOBSTER arrays 58 IF( sms_lobster_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trc_ini_lobster: unable to allocate LOBSTER arrays' ) 59 60 60 61 61 62 62 ! initialization of fields for optical model 63 63 ! -------------------------------------------- 64 xze (:,:) = 5. e065 xpar(:,:,:) = 0. e064 xze (:,:) = 5._wp 65 xpar(:,:,:) = 0._wp 66 66 67 67 ! initialization for passive tracer remineralisation-damping array … … 73 73 74 74 IF(lwp) THEN 75 WRITE(numout,*) ' ' 76 WRITE(numout,*) ' trcini: compute remineralisation-damping ' 77 WRITE(numout,*) ' arrays for tracers' 75 WRITE(numout,*) 76 WRITE(numout,*) ' trcini: compute remineralisation-damping arrays for tracers' 78 77 ENDIF 79 78 … … 85 84 ! ------------------------------------------------------------ 86 85 87 zdm0 = 0.e088 zrro = 1. e089 DO jk = jpkb, jpkm190 DO jj = 1, jpj91 DO ji = 1, jpi86 zdm0 = 0._wp 87 zrro = 1._wp 88 DO jk = jpkb, jpkm1 89 DO jj = 1, jpj 90 DO ji = 1, jpi 92 91 zfluo = ( fsdepw(ji,jj,jk ) / fsdepw(ji,jj,jpkb) )**xhr 93 92 zfluu = ( fsdepw(ji,jj,jk+1) / fsdepw(ji,jj,jpkb) )**xhr 94 IF( zfluo.GT.1. ) zfluo = 1. e093 IF( zfluo.GT.1. ) zfluo = 1._wp 95 94 zdm0(ji,jj,jk) = zfluo - zfluu 96 IF( jk <= jpkb-1 ) zdm0(ji,jj,jk) = 0. e095 IF( jk <= jpkb-1 ) zdm0(ji,jj,jk) = 0._wp 97 96 zrro(ji,jj) = zrro(ji,jj) - zdm0(ji,jj,jk) 98 97 END DO 99 98 END DO 100 99 END DO 101 100 ! 102 101 zdm0(:,:,jpk) = zrro(:,:) 103 102 … … 106 105 ! contains total fraction, which has passed to the upper layers) 107 106 ! ---------------------------------------------------------------------- 108 dminl = 0.109 dmin3 = zdm0107 dminl(:,:) = 0._wp 108 dmin3(:,:,:) = zdm0 110 109 DO jk = 1, jpk 111 110 DO jj = 1, jpj 112 111 DO ji = 1, jpi 113 IF( tmask(ji,jj,jk) == 0. ) THEN112 IF( tmask(ji,jj,jk) == 0._wp ) THEN 114 113 dminl(ji,jj) = dminl(ji,jj) + dmin3(ji,jj,jk) 115 dmin3(ji,jj,jk) = 0. e0114 dmin3(ji,jj,jk) = 0._wp 116 115 ENDIF 117 116 END DO … … 121 120 DO jj = 1, jpj 122 121 DO ji = 1, jpi 123 IF( tmask(ji,jj,1) == 0 ) dmin3(ji,jj,1) = 0. e0122 IF( tmask(ji,jj,1) == 0 ) dmin3(ji,jj,1) = 0._wp 124 123 END DO 125 124 END DO … … 127 126 ! Coastal mask 128 127 ! ------------ 129 cmask(:,:) = 0. e0128 cmask(:,:) = 0._wp 130 129 DO ji = 2, jpi-1 131 130 DO jj = 2, jpj-1 132 if (tmask(ji,jj,1) == 1) then131 IF( tmask(ji,jj,1) == 1._wp ) THEN 133 132 ztest=tmask(ji+1,jj,1)*tmask(ji-1,jj,1)*tmask(ji,jj+1,1)*tmask(ji,jj-1,1) 134 IF (ztest == 0) cmask(ji,jj) = 1.135 endif133 IF( ztest == 0 ) cmask(ji,jj) = 1._wp 134 ENDIF 136 135 END DO 137 136 END DO … … 249 248 250 249 ! initialize the POC in sediments 251 sedpocb(:,:) = 0.e0 252 sedpocn(:,:) = 0.e0 253 sedpoca(:,:) = 0.e0 254 255 250 sedpocb(:,:) = 0._wp 251 sedpocn(:,:) = 0._wp 252 sedpoca(:,:) = 0._wp 253 ! 256 254 IF(lwp) WRITE(numout,*) 'Initialization of LOBSTER tracers done' 257 IF(lwp) WRITE(numout,*) ' ' 258 259 IF( ( wrk_not_released(2, 1) ) .OR. ( wrk_not_released(3, 1) ) ) & 260 & CALL ctl_stop('trc_ini_lobster : failed to release workspace arrays.') 261 255 ! 256 IF( wrk_not_released(2, 1) .OR. & 257 wrk_not_released(3, 1) ) CALL ctl_stop('trc_ini_lobster: failed to release workspace arrays') 258 ! 262 259 END SUBROUTINE trc_ini_lobster 263 264 SUBROUTINE lobster_alloc265 !!----------------------------------------------------------------------266 !! *** ROUTINE lobster_alloc ***267 !!268 !! ** Purpose : Allocate all the dynamic arrays of LOBSTER269 !!----------------------------------------------------------------------270 271 ! ! Allocate LOBSTER arrays272 IF( sms_lobster_alloc() /= 0 ) &273 & CALL ctl_stop( 'STOP', 'trc_ini_lobster : unable to allocate LOBSTER arrays' )274 !275 END SUBROUTINE lobster_alloc276 260 277 261 #else -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcini_my_trc.F90
r2643 r2690 24 24 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 25 25 !! $Id$ 26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)26 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 27 27 !!---------------------------------------------------------------------- 28 29 28 CONTAINS 30 29 … … 38 37 !!---------------------------------------------------------------------- 39 38 40 CALL my_trc_alloc() ! Allocate MY_TRC arrays 39 ! ! Allocate MY_TRC arrays 40 IF( sms_lobster_alloc() /= 0 ) CALL ctl_stop( 'STOP', 'trc_ini_my_trc: unable to allocate MY_TRC arrays' ) 41 41 42 42 CALL trc_ctl_my_trc ! Control consitency … … 47 47 48 48 IF( .NOT. ln_rsttr ) trn(:,:,:,jp_myt0:jp_myt1) = 0. 49 50 49 ! 51 50 END SUBROUTINE trc_ini_my_trc 52 51 52 53 53 SUBROUTINE trc_ctl_my_trc 54 54 !!---------------------------------------------------------------------- … … 57 57 !! ** Purpose : control the cpp options, namelist and files 58 58 !!---------------------------------------------------------------------- 59 60 59 INTEGER :: jl, jn 61 60 !!---------------------------------------------------------------------- 61 ! 62 62 IF(lwp) WRITE(numout,*) 63 63 IF(lwp) WRITE(numout,*) ' use COLOR tracer ' 64 64 ! 65 65 DO jl = 1, jp_my_trc 66 66 jn = jp_myt0 + jl - 1 … … 69 69 ctrcun(jn)='N/A' 70 70 END DO 71 72 71 ! 73 72 END SUBROUTINE trc_ctl_my_trc 74 75 SUBROUTINE my_trc_alloc76 !!----------------------------------------------------------------------77 !! *** ROUTINE my_trc_alloc ***78 !!79 !! ** Purpose : Allocate all the dynamic arrays of MY_TRC80 !!----------------------------------------------------------------------81 82 ! ! Allocate MY_TRC arrays83 !84 END SUBROUTINE my_trc_alloc85 73 86 74 #else -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/MY_TRC/trcsms_my_trc.F90
r2528 r2690 10 10 !! 'key_my_trc' CFC tracers 11 11 !!---------------------------------------------------------------------- 12 !! trc_sms_my_trc : MY_TRC model main routine 12 !! trc_sms_my_trc : MY_TRC model main routine 13 !! trc_sms_my_trc_alloc : allocate arrays specific to MY_TRC sms 13 14 !!---------------------------------------------------------------------- 14 15 USE par_trc ! TOP parameters … … 21 22 PRIVATE 22 23 23 PUBLIC trc_sms_my_trc ! called by trcsms.F90 module 24 PUBLIC trc_sms_my_trc ! called by trcsms.F90 module 25 PUBLIC trc_sms_my_trc_alloc ! called by trcini_my_trc.F90 module 24 26 27 ! Defined HERE the arrays specific to MY_TRC sms and ALLOCATE them in trc_sms_my_trc_alloc 28 25 29 !!---------------------------------------------------------------------- 26 30 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 27 31 !! $Id$ 28 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)32 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 29 33 !!---------------------------------------------------------------------- 30 31 34 CONTAINS 32 35 … … 39 42 !! ** Method : - 40 43 !!---------------------------------------------------------------------- 41 INTEGER, INTENT(in) :: kt ! ocean time-step index 42 REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztrmyt 43 INTEGER :: jn 44 44 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 45 USE wrk_nemo, ONLY: ztrmyt => wrk_3d_1 ! used for lobster sms trends 46 ! 47 INTEGER, INTENT(in) :: kt ! ocean time-step index 48 INTEGER :: jn ! dummy loop index 49 !!---------------------------------------------------------------------- 45 50 46 51 IF(lwp) WRITE(numout,*) … … 49 54 50 55 WHERE( (glamt <= 170) .AND. (glamt >= 160) .AND. (gphit <= -74) .AND. (gphit >=-75.6) ) 51 trn(:,:,1,jpmyt1) = 1. 52 trb(:,:,1,jpmyt1) = 1. 53 tra(:,:,1,jpmyt1) = 0. 56 trn(:,:,1,jpmyt1) = 1._wp 57 trb(:,:,1,jpmyt1) = 1._wp 58 tra(:,:,1,jpmyt1) = 0._wp 54 59 END WHERE 55 60 56 61 WHERE( ((glamt <= -165) .OR. (glamt >= 160)) .AND. (gphit <= -76) .AND. (gphit >=-80)) 57 trn(:,:,1,jpmyt2) = 1. 58 trb(:,:,1,jpmyt2) = 1. 59 tra(:,:,1,jpmyt2) = 0. 62 trn(:,:,1,jpmyt2) = 1._wp 63 trb(:,:,1,jpmyt2) = 1._wp 64 tra(:,:,1,jpmyt2) = 0._wp 60 65 END WHERE 61 66 62 ! Save the trends in the ixed layer 63 IF( l_trdtrc ) THEN 67 IF( l_trdtrc ) THEN ! Save the trends in the ixed layer 64 68 DO jn = jp_myt0, jp_myt1 65 69 ztrmyt(:,:,:) = tra(:,:,:,jn) … … 69 73 ! 70 74 END SUBROUTINE trc_sms_my_trc 71 75 76 77 INTEGER FUNCTION trc_sms_my_trc_alloc() 78 !!---------------------------------------------------------------------- 79 !! *** ROUTINE trc_sms_my_trc_alloc *** 80 !!---------------------------------------------------------------------- 81 ! 82 ! ALLOCATE here the arrays specific to MY_TRC 83 ! ALLOCATE( tab(...) , STAT=trc_sms_my_trc_alloc ) 84 trc_sms_my_trc_alloc = 0 ! set to zero if no array to be allocated 85 ! 86 IF( trc_sms_my_trc_alloc /= 0 ) CALL ctl_warn('trc_sms_my_trc_alloc : failed to allocate arrays') 87 ! 88 END FUNCTION trc_sms_my_trc_alloc 89 90 72 91 #else 73 92 !!---------------------------------------------------------------------- -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zche.F90
r2643 r2690 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 PUBLIC p4z_che_alloc 28 29 !! * Shared module variables 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 !! * Module variables 35 36 REAL(wp) :: & 37 salchl = 1./1.80655 ! conversion factor for salinity --> chlorinity (Wooster et al. 1969) 38 39 REAL(wp) :: & ! coeff. for apparent solubility equilibrium 40 akcc1 = -171.9065 , & ! Millero et al. 1995 from Mucci 1983 41 akcc2 = -0.077993 , & 42 akcc3 = 2839.319 , & 43 akcc4 = 71.595 , & 44 akcc5 = -0.77712 , & 45 akcc6 = 0.0028426 , & 46 akcc7 = 178.34 , & 47 akcc8 = -0.07711 , & 48 akcc9 = 0.0041249 49 50 REAL(wp) :: & ! universal gas constants 51 rgas = 83.143, & 52 oxyco = 1./22.4144 53 54 REAL(wp) :: & ! borat constants 55 bor1 = 0.00023, & 56 bor2 = 1./10.82 57 58 REAL(wp) :: & ! 59 ca0 = -162.8301 , & 60 ca1 = 218.2968 , & 61 ca2 = 90.9241 , & 62 ca3 = -1.47696 , & 63 ca4 = 0.025695 , & 64 ca5 = -0.025225 , & 65 ca6 = 0.0049867 66 67 REAL(wp) :: & ! coeff. for 1. dissoc. of carbonic acid (Edmond and Gieskes, 1970) 68 c10 = -3670.7 , & 69 c11 = 62.008 , & 70 c12 = -9.7944 , & 71 c13 = 0.0118 , & 72 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 73 65 74 66 REAL(wp) :: & ! coeff. for 2. dissoc. of carbonic acid (Millero, 1995) … … 132 124 ox2 = 23.8439 , & 133 125 ox3 = -0.034892 , & 134 ox4 = 0.015568, &126 ox4 = 0.015568 , & 135 127 ox5 = -0.0019387 136 128 … … 150 142 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 151 143 !! $Id$ 152 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 153 !!---------------------------------------------------------------------- 154 144 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 145 !!---------------------------------------------------------------------- 155 146 CONTAINS 156 157 147 158 148 SUBROUTINE p4z_che … … 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 326 316 INTEGER FUNCTION p4z_che_alloc() 327 317 !!---------------------------------------------------------------------- 328 318 !! *** ROUTINE p4z_che_alloc *** 329 319 !!---------------------------------------------------------------------- 330 331 ALLOCATE( sio3eq(jpi,jpj,jpk), fekeq(jpi,jpj,jpk), & 332 & chemc(jpi,jpj,2), STAT=p4z_che_alloc ) 333 334 IF( p4z_che_alloc /= 0 ) CALL ctl_warn('p4z_che_alloc : failed to allocate arrays.') 335 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 ! 336 324 END FUNCTION p4z_che_alloc 325 337 326 #else 338 327 !!====================================================================== … … 341 330 CONTAINS 342 331 SUBROUTINE p4z_che( kt ) ! Empty routine 343 INTEGER, INTENT( in) :: kt332 INTEGER, INTENT(in) :: kt 344 333 WRITE(*,*) 'p4z_che: You should not have seen this print! error?', kt 345 334 END SUBROUTINE p4z_che -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zflx.F90
r2644 r2690 38 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) :: satmco2 !: atmospheric pco2 39 39 40 REAL(wp) :: t_oce_co2_flx!: Total ocean carbon flux41 REAL(wp) :: t_atm_co2_flx!: global mean of atmospheric pco242 REAL(wp) :: area!: ocean surface43 REAL(wp) :: atcco2 = 278.!: pre-industrial atmospheric [co2] (ppm)44 REAL(wp) :: atcox = 0.20946!:45 REAL(wp) :: xconv = 0.01/3600!: coefficients for conversion40 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 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 66 USE wrk_nemo, ONLY: zkgco2 => wrk_2d_1, zkgo2 => wrk_2d_2, zh2co3 => wrk_2d_3 67 USE wrk_nemo, ONLY: zoflx => wrk_2d_4, zkg => wrk_2d_5 68 USE wrk_nemo, ONLY: zdpco2 => wrk_2d_6, zdpo2 => wrk_2d_7 69 ! 70 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 ! 71 71 INTEGER :: ji, jj, jrorr 72 72 REAL(wp) :: ztc, ztc2, ztc3, zws, zkgwan … … 74 74 REAL(wp) :: zph, zah2, zbot, zdic, zalk, zsch_o2, zalka, zsch_co2 75 75 CHARACTER (len=25) :: charout 76 77 76 !!--------------------------------------------------------------------- 78 77 79 78 IF( wrk_in_use(2, 1,2,3,4,5,6,7) ) THEN 80 CALL ctl_stop('p4z_flx: requested workspace arrays unavailable') ;RETURN81 END 79 CALL ctl_stop('p4z_flx: requested workspace arrays unavailable') ; RETURN 80 ENDIF 82 81 83 82 ! SURFACE CHEMISTRY (PCO2 AND [H+] IN … … 213 212 CALL iom_put( "Dpo2" , zdpo2 ) 214 213 #endif 215 216 IF( wrk_not_released(2, 1,2,3,4,5,6,7) ) CALL ctl_stop('p4z_flx: failed to release workspace arrays')214 ! 215 IF( wrk_not_released(2, 1,2,3,4,5,6,7) ) CALL ctl_stop('p4z_flx: failed to release workspace arrays') 217 216 ! 218 217 END SUBROUTINE p4z_flx 219 218 219 220 220 SUBROUTINE p4z_flx_init 221 222 221 !!---------------------------------------------------------------------- 223 222 !! *** ROUTINE p4z_flx_init *** … … 228 227 !! called at the first timestep (nit000) 229 228 !! ** input : Namelist nampisext 230 !! 231 !!---------------------------------------------------------------------- 232 229 !!---------------------------------------------------------------------- 233 230 NAMELIST/nampisext/ atcco2 234 231 !!---------------------------------------------------------------------- 232 ! 235 233 REWIND( numnat ) ! read numnat 236 234 READ ( numnat, nampisext ) 237 235 ! 238 236 IF(lwp) THEN ! control print 239 237 WRITE(numout,*) ' ' … … 242 240 WRITE(numout,*) ' Atmospheric pCO2 atcco2 =', atcco2 243 241 ENDIF 244 245 ! interior global domain surface 246 area = glob_sum( e1e2t(:,:) ) 247 248 ! Initialization of Flux of Carbon 249 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 250 246 t_atm_co2_flx = 0._wp 251 ! Initialisation of atmospheric pco2252 satmco2(:,:) = atcco2 247 ! 248 satmco2(:,:) = atcco2 ! Initialisation of atmospheric pco2 253 249 t_oce_co2_flx = 0._wp 254 250 ! 255 251 END SUBROUTINE p4z_flx_init 256 252 253 257 254 INTEGER FUNCTION p4z_flx_alloc() 258 255 !!---------------------------------------------------------------------- 259 256 !! *** ROUTINE p4z_flx_alloc *** 260 257 !!---------------------------------------------------------------------- 261 262 258 ALLOCATE( oce_co2(jpi,jpj), satmco2(jpi,jpj), STAT=p4z_flx_alloc ) 263 264 IF( p4z_flx_alloc /= 0 ) CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays.')265 259 ! 260 IF( p4z_flx_alloc /= 0 ) CALL ctl_warn('p4z_flx_alloc : failed to allocate arrays') 261 ! 266 262 END FUNCTION p4z_flx_alloc 267 263 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zint.F90
r2643 r2690 23 23 PUBLIC p4z_int_alloc 24 24 25 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc!: Temp. dependancy of various biological rates26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: tgfunc2!: Temp. dependancy of mesozooplankton rates25 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) :: xksilim = 16.5E-6 ! Half-saturation constant for the computation of the Si half-saturation constant 30 28 REAL(wp) :: xksilim = 16.5e-6_wp ! Half-saturation constant for the Si half-saturation constant computation 31 29 32 30 !!---------------------------------------------------------------------- 33 31 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 34 32 !! $Id$ 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)33 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 34 !!---------------------------------------------------------------------- 37 38 35 CONTAINS 39 36 … … 46 43 !! ** Method : - ??? 47 44 !!--------------------------------------------------------------------- 48 !!49 45 INTEGER :: ji, jj 50 46 REAL(wp) :: zdum … … 53 49 ! Computation of phyto and zoo metabolic rate 54 50 ! ------------------------------------------- 55 56 51 tgfunc (:,:,:) = EXP( 0.063913 * tsn(:,:,:,jp_tem) ) 57 52 tgfunc2(:,:,:) = EXP( 0.07608 * tsn(:,:,:,jp_tem) ) … … 60 55 ! constant for silica uptake 61 56 ! --------------------------------------------------- 62 63 57 DO ji = 1, jpi 64 58 DO jj = 1, jpj … … 67 61 END DO 68 62 END DO 69 63 ! 70 64 IF( nday_year == nyear_len(1) ) THEN 71 65 xksi = xksimax 72 xksimax = 0. e066 xksimax = 0._wp 73 67 ENDIF 74 68 ! 75 69 END SUBROUTINE p4z_int 70 76 71 77 72 INTEGER FUNCTION p4z_int_alloc() … … 79 74 !! *** ROUTINE p4z_int_alloc *** 80 75 !!---------------------------------------------------------------------- 81 82 76 ALLOCATE( tgfunc(jpi,jpj,jpk), tgfunc2(jpi,jpj,jpk), STAT=p4z_int_alloc ) 83 84 IF( p4z_int_alloc /= 0 ) CALL ctl_warn('p4z_int_alloc : failed to allocate arrays.')85 77 ! 78 IF( p4z_int_alloc /= 0 ) CALL ctl_warn('p4z_int_alloc : failed to allocate arrays.') 79 ! 86 80 END FUNCTION p4z_int_alloc 87 81 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zopt.F90
r2643 r2690 29 29 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: emoy !: averaged PAR in the mixed layer 30 30 31 INTEGER :: nksrp ! levels below which the light cannot penetrate ( depth larger than 391 m)32 REAL(wp) :: parlux = 0.43 / 3.e033 34 REAL(wp), DIMENSION(3,61), PUBLIC :: xkrgb !: tabulated attenuation coefficients for RGB absorption31 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 35 35 36 36 !!* Substitution … … 39 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 40 40 !! $Id$ 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 !!---------------------------------------------------------------------- 43 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 !!---------------------------------------------------------------------- 44 43 CONTAINS 45 46 44 47 45 SUBROUTINE p4z_opt( kt, jnt ) … … 54 52 !! ** Method : - ??? 55 53 !!--------------------------------------------------------------------- 56 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 57 USE wrk_nemo, ONLY: zdepmoy => wrk_2d_1, zetmp => wrk_2d_2 58 USE wrk_nemo, ONLY: zekg => wrk_3d_2, zekr => wrk_3d_3, zekb => wrk_3d_4 59 USE wrk_nemo, ONLY: ze0 => wrk_3d_5, ze1 => wrk_3d_6 60 USE wrk_nemo, ONLY: ze2 => wrk_3d_7, ze3 => wrk_3d_8 61 ! 62 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 ! 63 62 INTEGER :: ji, jj, jk 64 63 INTEGER :: irgb … … 67 66 !!--------------------------------------------------------------------- 68 67 69 IF( ( wrk_in_use(2, 1,2) ) .OR. ( wrk_in_use(3, 2,3,4,5,6,7,8) )) THEN70 CALL ctl_stop('p4z_opt: requested workspace arrays unavailable') ;RETURN71 END 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 72 71 73 72 ! Initialisation of variables used to compute PAR 74 73 ! ----------------------------------------------- 75 ze1 (:,:,jpk) = 0. e076 ze2 (:,:,jpk) = 0. e077 ze3 (:,:,jpk) = 0. e074 ze1 (:,:,jpk) = 0._wp 75 ze2 (:,:,jpk) = 0._wp 76 ze3 (:,:,jpk) = 0._wp 78 77 79 78 ! !* attenuation coef. function of Chlorophyll and wavelength (Red-Green-Blue) … … 211 210 !CDIR NOVERRCHK 212 211 DO ji = 1, jpi 213 IF( fsdepw(ji,jj,jk+1) <= hmld(ji,jj) ) & 214 & 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 ) 215 213 END DO 216 214 END DO … … 231 229 #endif 232 230 ! 233 IF( ( wrk_not_released(2, 1,2) ) .OR. ( wrk_not_released(3, 2,3,4,5,6,7,8) ) )&234 &CALL ctl_stop('p4z_opt: failed to release workspace arrays')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') 235 233 ! 236 234 END SUBROUTINE p4z_opt 235 237 236 238 237 SUBROUTINE p4z_opt_init … … 241 240 !! 242 241 !! ** Purpose : Initialization of tabulated attenuation coef 243 !! 244 !! 245 !!---------------------------------------------------------------------- 246 242 !!---------------------------------------------------------------------- 243 ! 247 244 CALL trc_oce_rgb( xkrgb ) ! tabulated attenuation coefficients 248 !! CALL trc_oce_rgb_read( xkrgb ) ! tabulated attenuation coefficients249 245 nksrp = trc_oce_ext_lev( r_si2, 0.33e2 ) ! max level of light extinction (Blue Chl=0.01) 246 ! 250 247 IF(lwp) WRITE(numout,*) ' level of light extinction = ', nksrp, ' ref depth = ', gdepw_0(nksrp+1), ' m' 251 248 ! 252 etot (:,:,:) = 0. e0253 enano(:,:,:) = 0. e0254 ediat(:,:,:) = 0. e0255 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 256 253 ! 257 254 END SUBROUTINE p4z_opt_init 258 255 256 259 257 INTEGER FUNCTION p4z_opt_alloc() 260 258 !!---------------------------------------------------------------------- 261 259 !! *** ROUTINE p4z_opt_alloc *** 262 260 !!---------------------------------------------------------------------- 263 264 ALLOCATE( etot (jpi,jpj,jpk), enano(jpi,jpj,jpk), & 265 & ediat(jpi,jpj,jpk), emoy (jpi,jpj,jpk), STAT=p4z_opt_alloc ) 266 261 ALLOCATE( etot (jpi,jpj,jpk) , enano(jpi,jpj,jpk) , & 262 & ediat(jpi,jpj,jpk) , emoy (jpi,jpj,jpk) , STAT=p4z_opt_alloc ) 263 ! 267 264 IF( p4z_opt_alloc /= 0 ) CALL ctl_warn('p4z_opt_alloc : failed to allocate arrays.') 268 265 ! 269 266 END FUNCTION p4z_opt_alloc 270 267 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zprod.F90
r2643 r2690 29 29 PUBLIC p4z_prod_alloc 30 30 31 !! * Shared module variables32 31 REAL(wp), PUBLIC :: & 33 32 pislope = 3.0_wp , & !: … … 41 40 grosip = 0.151_wp 42 41 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: prmax !: 44 43 45 44 REAL(wp) :: & … … 54 53 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 55 54 !! $Id$ 56 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 57 !!---------------------------------------------------------------------- 58 55 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 56 !!---------------------------------------------------------------------- 59 57 CONTAINS 60 61 58 62 59 SUBROUTINE p4z_prod( kt , jnt ) … … 69 66 !! ** Method : - ??? 70 67 !!--------------------------------------------------------------------- 71 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released72 USE wrk_nemo, ONLY: zmixnano => wrk_2d_1 , zmixdiat => wrk_2d_2, zstrn => wrk_2d_373 USE wrk_nemo, ONLY: zpislopead => wrk_3d_2 , zpislopead2=> wrk_3d_274 USE wrk_nemo, ONLY: zprdia => wrk_3d_4 , zprbio => wrk_3d_5, zysopt => wrk_3d_675 USE wrk_nemo, ONLY: zprorca => wrk_3d_7 , zprorcad=> wrk_3d_876 USE wrk_nemo, ONLY: zprofed => wrk_3d_9 , zprofen=> wrk_3d_1077 USE wrk_nemo, ONLY: zprochln => wrk_3d_11, zprochld=> wrk_3d_1278 USE wrk_nemo, ONLY: zpronew => wrk_3d_13, zpronewd=> wrk_3d_1468 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_2 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 79 76 ! 80 77 INTEGER, INTENT(in) :: kt, jnt 78 ! 81 79 INTEGER :: ji, jj, jk 82 80 REAL(wp) :: zsilfac, zfact … … 92 90 !!--------------------------------------------------------------------- 93 91 94 IF( ( wrk_in_use(2, 1,2,3) ) .OR. ( wrk_in_use(3, 2,3,4,5,6,7,8,9,10,11,12,13,14) ) ) THEN 95 CALL ctl_stop('p4z_prod: requested workspace arrays unavailable') ; RETURN 96 END IF 97 98 zprorca (:,:,:) = 0.0 99 zprorcad(:,:,:) = 0.0 100 zprofed(:,:,:) = 0.0 101 zprofen(:,:,:) = 0.0 102 zprochln(:,:,:) = 0.0 103 zprochld(:,:,:) = 0.0 104 zpronew (:,:,:) = 0.0 105 zpronewd(:,:,:) = 0.0 106 zprdia (:,:,:) = 0.0 107 zprbio (:,:,:) = 0.0 108 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 109 108 110 109 ! Computation of the optimal production 111 112 110 # if defined key_degrad 113 111 prmax(:,:,:) = rday1 * tgfunc(:,:,:) * facvol(:,:,:) … … 117 115 118 116 ! compute the day length depending on latitude and the day 119 zrum = FLOAT( nday_year - 80 ) / REAL(nyear_len(1), wp)120 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 ) ) 121 119 122 120 ! day length in hours 123 zstrn(:,:) = 0. 121 zstrn(:,:) = 0._wp 124 122 DO jj = 1, jpj 125 123 DO ji = 1, jpi … … 362 360 #endif 363 361 364 362 IF(ln_ctl) THEN ! print mean trends (used for debugging) 365 363 WRITE(charout, FMT="('prod')") 366 364 CALL prt_ctl_trc_info(charout) 367 365 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 368 ENDIF 369 370 IF( ( wrk_not_released(2, 1,2,3) ) .OR. ( wrk_not_released(3, 2,3,4,5,6,7,8,9,10,11,12,13,14) ) ) & 371 & CALL ctl_stop('p4z_prod: failed to release workspace arrays') 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') 372 371 ! 373 372 END SUBROUTINE p4z_prod 374 373 374 375 375 SUBROUTINE p4z_prod_init 376 377 376 !!---------------------------------------------------------------------- 378 377 !! *** ROUTINE p4z_prod_init *** … … 384 383 !! 385 384 !! ** input : Namelist nampisprod 386 !!387 385 !!---------------------------------------------------------------------- 388 389 386 NAMELIST/nampisprod/ pislope, pislope2, excret, excret2, chlcnm, chlcdm, & 390 387 & fecnm, fecdm, grosip 388 !!---------------------------------------------------------------------- 391 389 392 390 REWIND( numnat ) ! read numnat … … 407 405 WRITE(numout,*) ' Minimum Fe/C in diatoms fecdm =', fecdm 408 406 ENDIF 409 407 ! 410 408 rday1 = 0.6 / rday 411 409 texcret = 1.0 - excret 412 410 texcret2 = 1.0 - excret2 413 411 tpp = 0. 414 412 ! 415 413 END SUBROUTINE p4z_prod_init 416 414 … … 420 418 !! *** ROUTINE p4z_prod_alloc *** 421 419 !!---------------------------------------------------------------------- 422 423 420 ALLOCATE( prmax(jpi,jpj,jpk), STAT=p4z_prod_alloc ) 424 421 ! 425 422 IF( p4z_prod_alloc /= 0 ) CALL ctl_warn('p4z_prod_alloc : failed to allocate arrays.') 426 423 ! 427 424 END FUNCTION p4z_prod_alloc 428 425 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zrem.F90
r2643 r2690 31 31 PUBLIC p4z_rem_alloc 32 32 33 !! * Shared module variables34 33 REAL(wp), PUBLIC :: & 35 34 xremik = 0.3_wp , & !: … … 40 39 oxymin = 1.e-6_wp !: 41 40 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: denitr!: denitrification array41 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 55 52 56 53 SUBROUTINE p4z_rem( kt ) … … 62 59 !! ** Method : - ??? 63 60 !!--------------------------------------------------------------------- 64 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released65 USE wrk_nemo, ONLY: ztempbac => wrk_2d_166 USE wrk_nemo, ONLY: zdepbac => wrk_3d_2, zfesatur => wrk_3d_2, zolimi => wrk_3d_461 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 67 64 ! 68 65 INTEGER, INTENT(in) :: kt ! ocean time step 66 ! 69 67 INTEGER :: ji, jj, jk 70 68 REAL(wp) :: zremip, zremik , zlam1b … … 78 76 REAL(wp) :: zlamfac, zonitr, zstep 79 77 CHARACTER (len=25) :: charout 80 81 78 !!--------------------------------------------------------------------- 82 79 83 IF( ( wrk_in_use(2, 1) ) .OR. ( wrk_in_use(3, 2,3,4) )) THEN84 CALL ctl_stop('p4z_rem: requested workspace arrays unavailable') ;RETURN85 END 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 86 83 87 84 ! Initialisation of temprary arrys 88 zdepbac (:,:,:) = 0. 089 zfesatur(:,:,:) = 0. 090 zolimi (:,:,:) = 0. 091 ztempbac(:,:) = 0. 085 zdepbac (:,:,:) = 0._wp 86 zfesatur(:,:,:) = 0._wp 87 zolimi (:,:,:) = 0._wp 88 ztempbac(:,:) = 0._wp 92 89 93 90 ! Computation of the mean phytoplankton concentration as 94 91 ! a crude estimate of the bacterial biomass 95 92 ! -------------------------------------------------- 96 97 93 DO jk = 1, jpkm1 98 94 DO jj = 1, jpj … … 368 364 tra(ji,jj,jk,jpbfe) = tra(ji,jj,jk,jpbfe) + zscave * zdenom2 369 365 #endif 370 371 END DO 372 END DO 373 END DO 374 ! 375 376 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) 377 372 WRITE(charout, FMT="('rem5')") 378 373 CALL prt_ctl_trc_info(charout) 379 374 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 380 381 382 383 375 ENDIF 376 377 ! Update the arrays TRA which contain the biological sources and sinks 378 ! -------------------------------------------------------------------- 384 379 385 380 DO jk = 1, jpkm1 … … 391 386 tra(:,:,jk,jpdic) = tra(:,:,jk,jpdic) + zolimi(:,:,jk) + denitr(:,:,jk) 392 387 tra(:,:,jk,jptal) = tra(:,:,jk,jptal) + denitr(:,:,jk) * rno3 * rdenit 393 END DO394 395 388 END DO 389 390 IF(ln_ctl) THEN ! print mean trends (used for debugging) 396 391 WRITE(charout, FMT="('rem6')") 397 392 CALL prt_ctl_trc_info(charout) 398 393 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 399 400 401 IF( ( wrk_not_released(2, 1) ) .OR. ( wrk_not_released(3, 2,3,4) ) )&402 &CALL ctl_stop('p4z_rem: failed to release workspace arrays')403 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 ! 404 399 END SUBROUTINE p4z_rem 405 400 401 406 402 SUBROUTINE p4z_rem_init 407 408 403 !!---------------------------------------------------------------------- 409 404 !! *** ROUTINE p4z_rem_init *** … … 417 412 !! 418 413 !!---------------------------------------------------------------------- 419 420 414 NAMELIST/nampisrem/ xremik, xremip, nitrif, xsirem, xlam1, oxymin 415 !!---------------------------------------------------------------------- 421 416 422 417 REWIND( numnat ) ! read numnat … … 434 429 WRITE(numout,*) ' halk saturation constant for anoxia oxymin =', oxymin 435 430 ENDIF 436 437 nitrfac(:,:,:) = 0. 0438 denitr (:,:,:) = 0. 0439 431 ! 432 nitrfac(:,:,:) = 0._wp 433 denitr (:,:,:) = 0._wp 434 ! 440 435 END SUBROUTINE p4z_rem_init 436 441 437 442 438 INTEGER FUNCTION p4z_rem_alloc() … … 444 440 !! *** ROUTINE p4z_rem_alloc *** 445 441 !!---------------------------------------------------------------------- 446 447 442 ALLOCATE( denitr(jpi,jpj,jpk), STAT=p4z_rem_alloc ) 448 449 IF( p4z_rem_alloc /= 0 ) CALL ctl_warn('p4z_rem_alloc : failed to allocate arrays.')450 443 ! 444 IF( p4z_rem_alloc /= 0 ) CALL ctl_warn('p4z_rem_alloc: failed to allocate arrays') 445 ! 451 446 END FUNCTION p4z_rem_alloc 447 452 448 #else 453 449 !!====================================================================== -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/p4zsink.F90
r2643 r2690 23 23 PUBLIC p4z_sink_alloc 24 24 25 !! * Shared module variables 26 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio3 !: POC sinking speed 27 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wsbio4 !: GOC sinking speed 28 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: wscal !: Calcite and BSi sinking speeds 29 30 !! * Module variables 31 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinking, sinking2 !: POC sinking fluxes 32 ! ! (different meanings depending on the parameterization) 33 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkcal, sinksil !: CaCO3 and BSi sinking fluxes 34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer !: Small BFe sinking fluxes 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 35 33 #if ! defined key_kriest 36 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes34 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: sinkfer2 !: Big iron sinking fluxes 37 35 #endif 38 36 … … 56 54 REAL(wp), PUBLIC :: xkr_wsbio_max !: max vertical particle speed 57 55 58 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: xnumm!: maximum number of particles in aggregates56 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:) :: xnumm !: maximum number of particles in aggregates 59 57 #endif 60 58 … … 64 62 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 65 63 !! $Id$ 66 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)64 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 67 65 !!---------------------------------------------------------------------- 68 69 66 CONTAINS 70 67 71 72 68 #if defined key_kriest 69 !!---------------------------------------------------------------------- 70 !! 'key_kriest' ??? 71 !!---------------------------------------------------------------------- 73 72 74 73 SUBROUTINE p4z_sink ( kt, jnt ) … … 81 80 !! ** Method : - ??? 82 81 !!--------------------------------------------------------------------- 83 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 84 USE wrk_nemo, ONLY: znum3d => wrk_3d_2 82 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 83 USE wrk_nemo, ONLY: znum3d => wrk_3d_2 84 ! 85 85 INTEGER, INTENT(in) :: kt, jnt 86 ! 86 87 INTEGER :: ji, jj, jk 87 88 REAL(wp) :: zagg1, zagg2, zagg3, zagg4, zagg5, zaggsi, zaggsh … … 95 96 #endif 96 97 CHARACTER (len=25) :: charout 97 98 !!--------------------------------------------------------------------- 99 98 !!--------------------------------------------------------------------- 99 ! 100 100 IF( wrk_in_use(3, 2 ) ) THEN 101 CALL ctl_stop('p4z_sink: requested workspace arrays unavailable') ; RETURN 102 END IF 101 CALL ctl_stop('p4z_sink: requested workspace arrays unavailable') ; RETURN 102 ENDIF 103 103 104 ! Initialisation of variables used to compute Sinking Speed 104 105 ! --------------------------------------------------------- 105 106 106 107 108 109 110 111 ! Computation of the vertical sinking speed : Kriest et Evans, 2000112 ! -----------------------------------------------------------------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 ! ----------------------------------------------------------------- 113 114 114 115 DO jk = 1, jpkm1 … … 128 129 zdiv1 = zeps - zval3 129 130 wsbio3(ji,jj,jk) = xkr_wsbio_min * ( zeps - zval1 ) / zdiv & 130 &- xkr_wsbio_max * zgm * xkr_eta / zdiv131 & - xkr_wsbio_max * zgm * xkr_eta / zdiv 131 132 wsbio4(ji,jj,jk) = xkr_wsbio_min * ( zeps-1. ) / zdiv1 & 132 &- xkr_wsbio_max * zfm * xkr_eta / zdiv1133 & - xkr_wsbio_max * zfm * xkr_eta / zdiv1 133 134 IF( znum == 1.1) wsbio3(ji,jj,jk) = wsbio4(ji,jj,jk) 134 135 ENDIF … … 137 138 END DO 138 139 139 wscal(:,:,:) = MAX( wsbio3(:,:,:), 50. )140 wscal(:,:,:) = MAX( wsbio3(:,:,:), 50._wp ) 140 141 141 142 ! INITIALIZE TO ZERO ALL THE SINKING ARRAYS … … 302 303 #endif 303 304 ! 304 305 IF(ln_ctl) THEN ! print mean trends (used for debugging) 305 306 WRITE(charout, FMT="('sink')") 306 307 CALL prt_ctl_trc_info(charout) 307 308 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 308 309 310 IF( wrk_not_released(3, 2 ) ) CALL ctl_stop('p4z_sink: failed to release workspace arrays')309 ENDIF 310 ! 311 IF( wrk_not_released(3, 2 ) ) CALL ctl_stop('p4z_sink: failed to release workspace arrays') 311 312 ! 312 313 END SUBROUTINE p4z_sink 314 313 315 314 316 SUBROUTINE p4z_sink_init … … 323 325 !! 324 326 !! ** input : Namelist nampiskrs 325 !!326 327 !!---------------------------------------------------------------------- 327 328 INTEGER :: jk, jn, kiter … … 329 330 REAL(wp) :: zws, zwr, zwl,wmax, znummax 330 331 REAL(wp) :: zmin, zmax, zl, zr, xacc 331 332 ! 332 333 NAMELIST/nampiskrs/ xkr_sfact, xkr_stick , & 333 334 & xkr_nnano, xkr_ndiat, xkr_nmeso, xkr_naggr 334 335 335 !!---------------------------------------------------------------------- 336 ! 336 337 REWIND( numnat ) ! read nampiskrs 337 338 READ ( numnat, nampiskrs ) … … 346 347 WRITE(numout,*) ' Nbr of cell in mesozoo size class xkr_nmeso = ', xkr_nmeso 347 348 WRITE(numout,*) ' Nbr of cell in aggregates size class xkr_naggr = ', xkr_naggr 348 ENDIF349 350 351 ! max and min vertical particle speed352 xkr_wsbio_min = xkr_sfact * xkr_mass_min**xkr_eta353 xkr_wsbio_max = xkr_sfact * xkr_mass_max**xkr_eta354 WRITE(numout,*) ' max and min vertical particle speed ', xkr_wsbio_min, xkr_wsbio_max355 356 !357 ! effect of the sizes of the different living pools on particle numbers358 ! nano = 2um-20um -> mean size=6.32 um -> ws=2.596 -> xnum=xnnano=2.337359 ! diat and microzoo = 10um-200um -> 44.7 -> 8.732 -> xnum=xndiat=3.718360 ! mesozoo = 200um-2mm -> 632.45 -> 45.14 -> xnum=xnmeso=7.147361 ! aggregates = 200um-10mm -> 1414 -> 74.34 -> xnum=xnaggr=9.877362 ! doc aggregates = 1um363 ! ----------------------------------------------------------364 365 xkr_dnano = 1. / ( xkr_massp * xkr_nnano )366 xkr_ddiat = 1. / ( xkr_massp * xkr_ndiat )367 xkr_dmeso = 1. / ( xkr_massp * xkr_nmeso )368 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 ) 369 370 370 371 !!--------------------------------------------------------------------- … … 378 379 WRITE(numout,*)' kriest : Compute maximum number of particles in aggregates' 379 380 380 xacc = 0.001 381 xacc = 0.001_wp 381 382 kiter = 50 382 zmin = 1.10 383 zmin = 1.10_wp 383 384 zmax = xkr_mass_max / xkr_mass_min 384 385 xkr_frac = zmax … … 401 402 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 402 403 & - wmax 403 iflag: DO jn = 1, kiter 404 IF( zwl == 0.e0 ) THEN 405 znummax = zl 406 ELSE IF ( zwr == 0.e0 ) THEN 407 znummax = zr 408 ELSE 409 znummax = ( zr + zl ) / 2. 410 zdiv = xkr_zeta + xkr_eta - xkr_eta * znummax 411 znum = znummax - 1. 412 zws = xkr_wsbio_min * xkr_zeta / zdiv & 413 & - ( xkr_wsbio_max * xkr_eta * znum * & 414 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 415 & - wmax 416 IF( zws * zwl < 0. ) THEN 417 zr = znummax 418 ELSE 419 zl = znummax 420 ENDIF 421 zdiv = xkr_zeta + xkr_eta - xkr_eta * zl 422 znum = zl - 1. 423 zwl = xkr_wsbio_min * xkr_zeta / zdiv & 424 & - ( xkr_wsbio_max * xkr_eta * znum * & 425 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 426 & - wmax 427 428 zdiv = xkr_zeta + xkr_eta - xkr_eta * zr 429 znum = zr - 1. 430 zwr = xkr_wsbio_min * xkr_zeta / zdiv & 431 & - ( xkr_wsbio_max * xkr_eta * znum * & 432 & xkr_frac**( -xkr_zeta / znum ) / zdiv ) & 433 & - wmax 434 435 IF ( ABS ( zws ) <= xacc ) EXIT iflag 436 437 ENDIF 438 439 END DO iflag 440 441 xnumm(jk) = znummax 442 WRITE(numout,*) ' jk = ', jk, ' wmax = ', wmax,' xnum max = ', xnumm(jk) 443 444 END DO 445 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 ! 446 443 END SUBROUTINE p4z_sink_init 447 444 … … 475 472 DO jj = 1, jpj 476 473 DO ji=1,jpi 477 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 478 475 wsbio4(ji,jj,jk) = wsbio2 + ( 200.- wsbio2 ) * zfact 479 476 END DO … … 583 580 #endif 584 581 ! 585 582 IF(ln_ctl) THEN ! print mean trends (used for debugging) 586 583 WRITE(charout, FMT="('sink')") 587 584 CALL prt_ctl_trc_info(charout) 588 585 CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm) 589 590 586 ENDIF 587 ! 591 588 END SUBROUTINE p4z_sink 589 592 590 593 591 SUBROUTINE p4z_sink_init … … 705 703 END DO 706 704 707 trn (:,:,:,jp_tra) = trb(:,:,:,jp_tra)708 psinkflx(:,:,:) = 2. * psinkflx(:,:,:)709 710 IF( wrk_not_released(3, 2,3,4 ) )CALL ctl_stop('p4z_sink2: failed to release workspace arrays')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') 711 709 ! 712 710 END SUBROUTINE p4z_sink2 711 713 712 714 713 INTEGER FUNCTION p4z_sink_alloc() … … 716 715 !! *** ROUTINE p4z_sink_alloc *** 717 716 !!---------------------------------------------------------------------- 718 719 ALLOCATE( wsbio3(jpi,jpj,jpk), wsbio4(jpi,jpj,jpk), wscal(jpi,jpj,jpk), & 720 & sinking(jpi,jpj,jpk), sinking2(jpi,jpj,jpk) , & 721 & sinkcal(jpi,jpj,jpk), sinksil(jpi,jpj,jpk) , & 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) , & 722 720 #if defined key_kriest 723 & xnumm(jpk) ,&721 & xnumm(jpk) , & 724 722 #else 725 & sinkfer2(jpi,jpj,jpk) , & 726 #endif 727 728 & sinkfer(jpi,jpj,jpk), STAT=p4z_sink_alloc ) 729 723 & sinkfer2(jpi,jpj,jpk) , & 724 #endif 725 & sinkfer(jpi,jpj,jpk) , STAT=p4z_sink_alloc ) 726 ! 730 727 IF( p4z_sink_alloc /= 0 ) CALL ctl_warn('p4z_sink_alloc : failed to allocate arrays.') 731 728 ! 732 729 END FUNCTION p4z_sink_alloc 730 733 731 #else 734 732 !!====================================================================== -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/sms_pisces.F90
r2643 r2690 7 7 !! 3.2 ! 2009-04 (C. Ethe & NEMO team) style 8 8 !!---------------------------------------------------------------------- 9 10 9 #if defined key_pisces 11 10 !!---------------------------------------------------------------------- … … 87 86 #endif 88 87 88 !!---------------------------------------------------------------------- 89 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 90 !! $Id$ 91 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 92 !!---------------------------------------------------------------------- 89 93 CONTAINS 90 94 … … 94 98 !!---------------------------------------------------------------------- 95 99 USE lib_mpp , ONLY: ctl_warn 96 INTEGER :: ierr(5) ! Local variables100 INTEGER :: ierr(5) ! Local variables 97 101 !!---------------------------------------------------------------------- 98 99 102 ierr(:) = 0 100 103 ! 101 104 !* Biological fluxes for light 102 105 ALLOCATE( neln(jpi,jpj), heup(jpi,jpj), STAT=ierr(1) ) 103 106 ! 104 107 !* Biological fluxes for primary production 105 108 ALLOCATE( xksimax(jpi,jpj) , xksi(jpi,jpj) , & … … 108 111 & xlimphy (jpi,jpj,jpk), xlimdia (jpi,jpj,jpk), & 109 112 & concdfe (jpi,jpj,jpk), concnfe (jpi,jpj,jpk), STAT=ierr(2) ) 110 113 ! 111 114 !* SMS for the organic matter 112 115 ALLOCATE( xfracal (jpi,jpj,jpk), nitrfac (jpi,jpj,jpk), & … … 115 118 #endif 116 119 & xlimbac (jpi,jpj,jpk), xdiss(jpi,jpj,jpk) , STAT=ierr(3) ) 117 120 ! 118 121 !* Variable for chemistry of the CO2 cycle 119 122 ALLOCATE( akb3(jpi,jpj,jpk), ak13(jpi,jpj,jpk) , & 120 123 & ak23(jpi,jpj,jpk), aksp(jpi,jpj,jpk) , & 121 124 & akw3(jpi,jpj,jpk), borat(jpi,jpj,jpk), hi(jpi,jpj,jpk), STAT=ierr(4) ) 122 125 ! 123 126 !* Array used to indicate negative tracer values 124 127 ALLOCATE( xnegtr(jpi,jpj,jpk), STAT=ierr(5) ) 125 128 ! 126 129 sms_pisces_alloc = MAXVAL( ierr ) 127 128 IF( sms_pisces_alloc /= 0 ) CALL ctl_warn('sms_pisces_alloc : failed to allocate arrays.')129 130 ! 131 IF( sms_pisces_alloc /= 0 ) CALL ctl_warn('sms_pisces_alloc: failed to allocate arrays') 132 ! 130 133 END FUNCTION sms_pisces_alloc 131 134 … … 136 139 #endif 137 140 138 !!----------------------------------------------------------------------139 !! NEMO/TOP 3.3 , NEMO Consortium (2010)140 !! $Id$141 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)142 141 !!====================================================================== 143 142 END MODULE sms_pisces -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/PISCES/trcini_pisces.F90
r2643 r2690 34 34 PUBLIC trc_ini_pisces ! called by trcini.F90 module 35 35 36 !! * Module variables 37 REAL(wp) :: sco2 = 2.312e-3 38 REAL(wp) :: alka0 = 2.423e-3 39 REAL(wp) :: oxyg0 = 177.6e-6 40 REAL(wp) :: po4 = 2.174e-6 41 REAL(wp) :: bioma0 = 1.000e-8 42 REAL(wp) :: silic1 = 91.65e-6 43 REAL(wp) :: 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 44 43 45 44 # include "top_substitute.h90" … … 47 46 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 48 47 !! $Id$ 49 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)48 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 50 49 !!---------------------------------------------------------------------- 51 52 50 CONTAINS 53 51 … … 58 56 !! ** Purpose : Initialisation of the PISCES biochemical model 59 57 !!---------------------------------------------------------------------- 60 61 58 ! 62 59 IF(lwp) WRITE(numout,*) 63 60 IF(lwp) WRITE(numout,*) ' trc_ini_pisces : PISCES biochemical model initialisation' 64 61 IF(lwp) WRITE(numout,*) ' ~~~~~~~~~~~~~~' 65 66 62 67 63 CALL pisces_alloc() ! Allocate PISCES arrays … … 130 126 IF(lwp) WRITE(numout,*) 'Initialization of PISCES tracers done' 131 127 IF(lwp) WRITE(numout,*) ' ' 132 133 128 ! 134 129 END SUBROUTINE trc_ini_pisces 130 135 131 136 132 SUBROUTINE pisces_alloc … … 162 158 ! 163 159 IF( lk_mpp ) CALL mpp_sum( ierr ) 164 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'pisces_alloc : unable to allocate PISCES arrays' ) 165 160 IF( ierr /= 0 ) CALL ctl_stop( 'STOP', 'pisces_alloc: unable to allocate PISCES arrays' ) 166 161 ! 167 162 END SUBROUTINE pisces_alloc -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trcadv.F90
r2643 r2690 35 35 INTEGER :: nadv ! choice of the type of advection scheme 36 36 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra 37 !! except at nit000 (=rdttra) if neuler=037 ! ! except at nit000 (=rdttra) if neuler=0 38 38 39 39 !! * Substitutions … … 45 45 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 46 46 !!---------------------------------------------------------------------- 47 48 47 CONTAINS 49 48 … … 69 68 !!---------------------------------------------------------------------- 70 69 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 71 USE wrk_nemo, ONLY: zun => wrk_3d_4, zvn => wrk_3d_5, & 72 zwn => wrk_3d_6 ! effective velocity 70 USE wrk_nemo, ONLY: zun => wrk_3d_4, zvn => wrk_3d_5, zwn => wrk_3d_6 ! effective velocity 73 71 !! 74 INTEGER, INTENT( in) :: kt ! ocean time-step index75 ! 76 INTEGER :: jk77 CHARACTER (len=22) :: charout78 !!---------------------------------------------------------------------- 79 72 INTEGER, INTENT(in) :: kt ! ocean time-step index 73 ! 74 INTEGER :: jk 75 CHARACTER (len=22) :: charout 76 !!---------------------------------------------------------------------- 77 ! 80 78 IF( wrk_in_use(3, 4,5,6) ) THEN 81 CALL ctl_stop('trc_adv : requested workspace arrays unavailable.') 82 RETURN 83 END IF 79 CALL ctl_stop('trc_adv : requested workspace arrays unavailable') ; RETURN 80 ENDIF 84 81 85 82 IF( kt == nit000 ) CALL trc_adv_ctl ! initialisation & control of options … … 191 188 ! 192 189 END SUBROUTINE trc_adv_ctl 190 193 191 #else 194 192 !!---------------------------------------------------------------------- … … 201 199 END SUBROUTINE trc_adv 202 200 #endif 201 203 202 !!====================================================================== 204 203 END MODULE trcadv -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trcdmp.F90
r2606 r2690 33 33 34 34 LOGICAL , PUBLIC, PARAMETER :: lk_trcdmp = .TRUE. !: internal damping flag 35 ! !!* Namelist namtrc_dmp : passive tracer newtonian damping * 35 36 ! !!* Namelist namtrc_dmp : passive tracer newtonian damping * 36 37 INTEGER :: nn_hdmp_tr = -1 ! = 0/-1/'latitude' for damping over passive tracer 37 38 INTEGER :: nn_zdmp_tr = 0 ! = 0/1/2 flag for damping in the mixed layer … … 48 49 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 49 50 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/TOP_SRC/TRP/trcdmp.F90,v 1.11 2006/09/01 14:03:49 opalod Exp $ 50 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 51 !!---------------------------------------------------------------------- 52 51 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 52 !!---------------------------------------------------------------------- 53 53 CONTAINS 54 54 55 FUNCTION trc_dmp_alloc()55 INTEGER FUNCTION trc_dmp_alloc() 56 56 !!---------------------------------------------------------------------- 57 57 !! *** ROUTINE trc_dmp_alloc *** 58 58 !!---------------------------------------------------------------------- 59 INTEGER :: trc_dmp_alloc 60 !!---------------------------------------------------------------------- 61 62 ALLOCATE(restotr(jpi,jpj,jpk), Stat=trc_dmp_alloc) 63 64 IF(trc_dmp_alloc /= 0)THEN 65 CALL ctl_warn('trc_dmp_alloc : failed to allocate array.') 66 END IF 67 59 ALLOCATE( restotr(jpi,jpj,jpk) , STAT=trc_dmp_alloc ) 60 ! 61 IF( trc_dmp_alloc /= 0 ) CALL ctl_warn('trc_dmp_alloc: failed to allocate array') 62 ! 68 63 END FUNCTION trc_dmp_alloc 69 64 … … 178 173 !! 179 174 !! ** Method : read the nammbf namelist and check the parameters 180 !! called by trc_dmp at the first timestep (nit000)175 !! called by trc_dmp at the first timestep (nit000) 181 176 !!---------------------------------------------------------------------- 182 177 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trcnxt.F90
r2643 r2690 57 57 !! *** ROUTINE trc_nxt_alloc *** 58 58 !!---------------------------------------------------------------------- 59 ! 60 ALLOCATE( r2dt(jpk), STAT=trc_nxt_alloc) 59 ALLOCATE( r2dt(jpk), STAT=trc_nxt_alloc ) 61 60 ! 62 61 IF( trc_nxt_alloc /= 0 ) CALL ctl_warn('trc_nxt_alloc : failed to allocate array') … … 89 88 !! ** Action : - update trb, trn 90 89 !!---------------------------------------------------------------------- 91 !! * Arguments92 90 INTEGER, INTENT( in ) :: kt ! ocean time-step index 93 ! ! * Local declarations91 ! 94 92 INTEGER :: jk, jn ! dummy loop indices 95 93 REAL(wp) :: zfact ! temporary scalar -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trczdf.F90
r2643 r2690 10 10 !!---------------------------------------------------------------------- 11 11 !! 'key_top' TOP models 12 !!----------------------------------------------------------------------13 12 !!---------------------------------------------------------------------- 14 13 !! trc_ldf : update the tracer trend with the lateral diffusion … … 33 32 ! ! defined from ln_zdf... namlist logicals) 34 33 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:) :: r2dt ! vertical profile time-step, = 2 rdttra 35 ! ! except at nit000 (=rdttra) if neuler=034 ! ! except at nit000 (=rdttra) if neuler=0 36 35 37 36 !! * Substitutions … … 42 41 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 43 42 !! $Id$ 44 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)43 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 45 44 !!---------------------------------------------------------------------- 46 47 45 CONTAINS 48 46 49 FUNCTION trc_zdf_alloc()47 INTEGER FUNCTION trc_zdf_alloc() 50 48 !!---------------------------------------------------------------------- 51 49 !! *** ROUTINE trc_zdf_alloc *** 52 50 !!---------------------------------------------------------------------- 53 INTEGER :: trc_zdf_alloc 54 !!---------------------------------------------------------------------- 55 56 ALLOCATE(r2dt(jpk), Stat=trc_zdf_alloc) 57 58 IF(trc_zdf_alloc /= 0)THEN 59 CALL ctl_warn('trc_zdf_alloc : failed to allocate array.') 60 END IF 61 51 ALLOCATE( r2dt(jpk) , STAT=trc_zdf_alloc ) 52 ! 53 IF( trc_zdf_alloc /= 0 ) CALL ctl_warn('trc_zdf_alloc : failed to allocate array.') 54 ! 62 55 END FUNCTION trc_zdf_alloc 63 56 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trdmld_trc.F90
r2643 r2690 72 72 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 73 73 !! $Header: $ 74 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)74 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 75 75 !!---------------------------------------------------------------------- 76 77 76 CONTAINS 78 77 79 FUNCTION trd_mld_trc_alloc()78 INTEGER FUNCTION trd_mld_trc_alloc() 80 79 !!---------------------------------------------------------------------- 81 80 !! *** ROUTINE trd_mld_trc_alloc *** 82 81 !!---------------------------------------------------------------------- 83 INTEGER :: trd_mld_trc_alloc 84 !!---------------------------------------------------------------------- 85 86 ALLOCATE(ztmltrd2(jpi,jpj,jpltrd_trc,jptra), & 82 ALLOCATE( ztmltrd2(jpi,jpj,jpltrd_trc,jptra) , & 87 83 #if defined key_lobster 88 ztmltrdbio2(jpi,jpj,jpdiabio) ,&89 #endif 90 & ndextrd1(jpi*jpj), STAT=trd_mld_trc_alloc)84 & ztmltrdbio2(jpi,jpj,jpdiabio) , & 85 #endif 86 & ndextrd1(jpi*jpj) , STAT=trd_mld_trc_alloc) 91 87 ! 92 88 IF( lk_mpp ) CALL mpp_sum ( trd_mld_trc_alloc ) 93 IF( trd_mld_trc_alloc /=0 ) CALL ctl_warn('trd_mld_trc_alloc : failed to allocate arrays.') 89 IF( trd_mld_trc_alloc /=0 ) CALL ctl_warn('trd_mld_trc_alloc: failed to allocate arrays') 90 ! 94 91 END FUNCTION trd_mld_trc_alloc 95 92 … … 115 112 !! surface and the control surface is called "mixed-layer" 116 113 !!---------------------------------------------------------------------- 117 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released118 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1114 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 115 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1 119 116 !! 120 117 INTEGER, INTENT( in ) :: ktrd, kjn ! ocean trend index and passive tracer rank … … 125 122 126 123 IF( wrk_in_use(2, 1) ) THEN 127 CALL ctl_stop('trd_mld_trc_zint 128 END 124 CALL ctl_stop('trd_mld_trc_zint: requested workspace array unavailable') ; RETURN 125 ENDIF 129 126 130 127 ! I. Definition of control surface and integration weights … … 210 207 tmltrd_trc(:,:,ktrd,kjn) = tmltrd_trc(:,:,ktrd,kjn) + ptrc_trdmld(:,:,1) * wkx_trc(:,:,1) ! non penetrative 211 208 END SELECT 212 213 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_trc_zint : failed to release workspace array.')214 ! 215 216 217 218 209 ! 210 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_trc_zint: failed to release workspace array') 211 ! 212 END SUBROUTINE trd_mld_trc_zint 213 214 215 SUBROUTINE trd_mld_bio_zint( ptrc_trdmld, ktrd ) 219 216 !!---------------------------------------------------------------------- 220 217 !! *** ROUTINE trd_mld_bio_zint *** … … 234 231 !! surface and the control surface is called "mixed-layer" 235 232 !!---------------------------------------------------------------------- 236 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released237 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1238 !! 239 INTEGER , INTENT( in) :: ktrd ! bio trend index240 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT( in ) :: ptrc_trdmld! passive trc trend233 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 234 USE wrk_nemo, ONLY: zvlmsk => wrk_2d_1 235 !! 236 INTEGER , INTENT(in) :: ktrd ! bio trend index 237 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: ptrc_trdmld ! passive trc trend 241 238 #if defined key_lobster 242 ! ! local variables239 ! 243 240 INTEGER :: ji, jj, jk, isum 244 241 !!---------------------------------------------------------------------- 245 242 246 243 IF( wrk_in_use(2, 1) ) THEN 247 CALL ctl_stop('trd_mld_bio_zint : requested workspace array unavailable.') ;RETURN248 END 244 CALL ctl_stop('trd_mld_bio_zint: requested workspace array unavailable') ; RETURN 245 ENDIF 249 246 250 247 ! I. Definition of control surface and integration weights … … 328 325 END DO 329 326 330 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_bio_zint : failed to release workspace array.')331 #endif 332 333 334 335 336 327 IF( wrk_not_released(2, 1) ) CALL ctl_stop('trd_mld_bio_zint: failed to release workspace array') 328 #endif 329 ! 330 END SUBROUTINE trd_mld_bio_zint 331 332 333 SUBROUTINE trd_mld_trc( kt ) 337 334 !!---------------------------------------------------------------------- 338 335 !! *** ROUTINE trd_mld_trc *** … … 385 382 USE wrk_nemo, ONLY: wrk_3d_5, wrk_3d_6, wrk_3d_7, wrk_3d_8, wrk_3d_9 386 383 ! 387 INTEGER, INTENT( in ) :: kt ! ocean time-step index 384 INTEGER, INTENT(in) :: kt ! ocean time-step index 385 ! 388 386 INTEGER :: ji, jj, jk, jl, ik, it, itmod, jn 389 387 REAL(wp) :: zavt, zfn, zfn2 390 ! !388 ! 391 389 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmltot ! d(trc)/dt over the anlysis window (incl. Asselin) 392 390 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlres ! residual = dh/dt entrainment term 393 391 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlatf ! for storage only 394 392 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlrad ! for storage only (for trb<0 corr in trcrad) 395 ! !393 ! 396 394 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmltot2 ! -+ 397 395 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlres2 ! | working arrays to diagnose the trends … … 400 398 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztmlrad2 ! | (-> for trb<0 corr in trcrad) 401 399 !REAL(wp), DIMENSION(jpi,jpj,jpltrd_trc,jptra) :: ztmltrd2 ! -+ 402 ! !400 ! 403 401 CHARACTER (LEN= 5) :: clvar 404 402 #if defined key_dimgout … … 423 421 424 422 425 IF( nn_dttrc /= 1 ) CALL ctl_stop( " Be careful, trends diags never validated " )423 IF( nn_dttrc /= 1 ) CALL ctl_stop( " Be careful, trends diags never validated " ) 426 424 427 425 ! ====================================================================== … … 448 446 449 447 DO jn = 1, jptra 450 ! ... Remove this K_z trend from the iso-neutral diffusion term (if any)448 ! ... Remove this K_z trend from the iso-neutral diffusion term (if any) 451 449 IF( ln_trdtrc(jn) ) & 452 450 tmltrd_trc(:,:,jpmld_trc_ldf,jn) = tmltrd_trc(:,:,jpmld_trc_ldf,jn) - tmltrd_trc(:,:,jpmld_trc_zdf,jn) … … 909 907 IF( lrst_trc ) CALL trd_mld_trc_rst_write( kt ) ! this must be after the array swap above (III.3) 910 908 911 IF( wrk_not_released(3, 1,2,3,4,5,6,7,8,9) ) & 912 & CALL ctl_stop('trd_mld_trc : failed to release workspace arrays.') 909 IF( wrk_not_released(3, 1,2,3,4,5,6,7,8,9) ) CALL ctl_stop('trd_mld_trc: failed to release workspace arrays') 913 910 ! 914 911 END SUBROUTINE trd_mld_trc 915 912 916 SUBROUTINE trd_mld_bio( kt ) 913 914 SUBROUTINE trd_mld_bio( kt ) 917 915 !!---------------------------------------------------------------------- 918 916 !! *** ROUTINE trd_mld *** … … 1149 1147 END SUBROUTINE trd_mld_bio 1150 1148 1149 1151 1150 REAL FUNCTION sum2d( ztab ) 1152 1151 !!---------------------------------------------------------------------- … … 1155 1154 REAL(wp), DIMENSION(jpi,jpj), INTENT( in ) :: ztab 1156 1155 !!---------------------------------------------------------------------- 1157 sum2d = SUM( ztab(2:jpi-1,2:jpj-1))1156 sum2d = SUM( ztab(2:jpi-1,2:jpj-1) ) 1158 1157 END FUNCTION sum2d 1158 1159 1159 1160 1160 SUBROUTINE trd_mld_trc_init … … 1442 1442 !! Default option : Empty module 1443 1443 !!---------------------------------------------------------------------- 1444 1445 1444 CONTAINS 1446 1447 1445 SUBROUTINE trd_mld_trc( kt ) ! Empty routine 1448 1446 INTEGER, INTENT( in) :: kt 1449 1447 WRITE(*,*) 'trd_mld_trc: You should not have seen this print! error?', kt 1450 1448 END SUBROUTINE trd_mld_trc 1451 1452 1449 SUBROUTINE trd_mld_bio( kt ) 1453 1450 INTEGER, INTENT( in) :: kt 1454 1451 WRITE(*,*) 'trd_mld_bio: You should not have seen this print! error?', kt 1455 1452 END SUBROUTINE trd_mld_bio 1456 1457 1453 SUBROUTINE trd_mld_trc_zint( ptrc_trdmld, ktrd, ctype, kjn ) 1458 1454 INTEGER , INTENT( in ) :: ktrd, kjn ! ocean trend index and passive tracer rank … … 1464 1460 WRITE(*,*) ' " " : You should not have seen this print! error?', kjn 1465 1461 END SUBROUTINE trd_mld_trc_zint 1466 1467 1462 SUBROUTINE trd_mld_trc_init ! Empty routine 1468 1463 WRITE(*,*) 'trd_mld_trc_init: You should not have seen this print! error?' -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/TRP/trdmod_trc_oce.F90
r2643 r2690 8 8 !! 'key_top' TOP models 9 9 !!---------------------------------------------------------------------- 10 11 10 USE par_oce ! ocean parameters 12 11 USE par_trc ! passive tracers parameters … … 23 22 CHARACTER(len=50) :: cn_trdrst_trc_in !: suffix of pass. tracer restart name (input) 24 23 CHARACTER(len=50) :: cn_trdrst_trc_out !: suffix of pass. tracer restart name (output) 25 LOGICAL, DIMENSION (jptra) :: ln_trdtrc!: large trends diagnostic to write or not (namelist)24 LOGICAL, DIMENSION(jptra) :: ln_trdtrc !: large trends diagnostic to write or not (namelist) 26 25 27 26 # if defined key_trdtrc && defined key_iomput … … 117 116 !: upper triangle 118 117 #endif 119 120 118 !!---------------------------------------------------------------------- 121 119 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 122 120 !! $Header: /home/opalod/NEMOCVSROOT/NEMO/OPA_SRC/TRD/trdmld_oce.F90,v 1.2 2005/03/27 18:35:23 opalod Exp $ 123 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)121 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 124 122 !!---------------------------------------------------------------------- 125 123 CONTAINS … … 132 130 INTEGER :: ierr(2) 133 131 !!---------------------------------------------------------------------- 134 135 132 ierr(:) = 0 136 133 ! 137 134 # if defined key_trdmld_trc 138 135 ALLOCATE(nmld_trc(jpi,jpj), nbol_trc(jpi,jpj), & … … 149 146 tmlradn_trc(jpi,jpj,jptra), tmlradm_trc(jpi,jpj,jptra), & 150 147 ! 151 tmltrd_trc(jpi,jpj,jpltrd_trc,jptra) , &152 tmltrd_sum_trc(jpi,jpj,jpltrd_trc,jptra) , &153 tmltrd_csum_ln_trc(jpi,jpj,jpltrd_trc,jptra) , &154 tmltrd_csum_ub_trc(jpi,jpj,jpltrd_trc,jptra) , &148 tmltrd_trc(jpi,jpj,jpltrd_trc,jptra) , & 149 tmltrd_sum_trc(jpi,jpj,jpltrd_trc,jptra) , & 150 tmltrd_csum_ln_trc(jpi,jpj,jpltrd_trc,jptra) , & 151 tmltrd_csum_ub_trc(jpi,jpj,jpltrd_trc,jptra) , & 155 152 ! 156 tmltrdm_trc(jpi,jpj,jptra), & 157 Stat=ierr(1)) 153 tmltrdm_trc(jpi,jpj,jptra) , STAT=ierr(1) ) 158 154 #endif 159 155 ! 160 156 # if defined key_lobster 161 ALLOCATE(tmltrd_bio(jpi,jpj,jpdiabio), & 162 tmltrd_sum_bio(jpi,jpj,jpdiabio), & 163 tmltrd_csum_ln_bio(jpi,jpj,jpdiabio), & 164 tmltrd_csum_ub_bio(jpi,jpj,jpdiabio), & 165 Stat=ierr(2)) 157 ALLOCATE( tmltrd_bio (jpi,jpj,jpdiabio) , & 158 & tmltrd_sum_bio (jpi,jpj,jpdiabio) , & 159 & tmltrd_csum_ln_bio(jpi,jpj,jpdiabio) , & 160 & tmltrd_csum_ub_bio(jpi,jpj,jpdiabio) , STAT=ierr(2) ) 166 161 # endif 167 162 ! 168 163 trd_mod_trc_oce_alloc = MAXVAL(ierr) 169 170 IF( trd_mod_trc_oce_alloc /= 0 ) CALL ctl_warn('trd_mod_trc_oce_alloc 171 164 ! 165 IF( trd_mod_trc_oce_alloc /= 0 ) CALL ctl_warn('trd_mod_trc_oce_alloc: failed to allocate arrays') 166 ! 172 167 # if defined key_trdmld_trc 173 168 jpktrd_trc = jpk ! Initialise what used to be a parameter - max level for mixed-layer trends diag. -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trc.F90
r2643 r2690 19 19 PUBLIC 20 20 21 PUBLIC trc_alloc! called by nemogcm.F9021 PUBLIC trc_alloc ! called by nemogcm.F90 22 22 23 23 !! passive tracers names and units (read in namelist) … … 36 36 !! passive tracers fields (before,now,after) 37 37 !! -------------------------------------------------- 38 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: cvol !: volume correction -degrad option-39 38 REAL(wp), PUBLIC :: trai !: initial total tracer 40 39 REAL(wp), PUBLIC :: areatot !: total volume 41 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: trn !: traceur concentration for actualtime step43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: tra !: traceur concentration for next time step44 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: trb !: traceur concentration for before time step40 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: cvol !: volume correction -degrad option- 41 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: trn !: traceur concentration for now time step 42 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: tra !: traceur concentration for next time step 43 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:,:) :: trb !: traceur concentration for before time step 45 44 46 45 !! interpolated gradient 47 46 !!-------------------------------------------------- 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: gtru !: hor izontalgradient at u-points at bottom ocean level49 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: gtrv !: hor izontalgradient at v-points at bottom ocean level47 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: gtru !: hor. gradient at u-points at bottom ocean level 48 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION (:,:,:) :: gtrv !: hor. gradient at v-points at bottom ocean level 50 49 51 50 !! passive tracers restart (input and output) 52 51 !! ------------------------------------------ 53 LOGICAL , PUBLIC :: ln_rsttr!: boolean term for restart i/o for passive tracers (namelist)54 LOGICAL , PUBLIC :: lrst_trc!: logical to control the trc restart write55 INTEGER , PUBLIC :: nn_dttrc!: frequency of step on passive tracers56 INTEGER , PUBLIC :: nutwrs!: output FILE for passive tracers restart57 INTEGER , PUBLIC :: nutrst!: logical unit for restart FILE for passive tracers58 INTEGER , PUBLIC :: nn_rsttr!: control of the time step ( 0 or 1 ) for pass. tr.59 CHARACTER(len=50), PUBLIC :: cn_trcrst_in !: suffix of pass. tracer restart name (input)60 CHARACTER(len=50), PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output)52 LOGICAL , PUBLIC :: ln_rsttr !: boolean term for restart i/o for passive tracers (namelist) 53 LOGICAL , PUBLIC :: lrst_trc !: logical to control the trc restart write 54 INTEGER , PUBLIC :: nn_dttrc !: frequency of step on passive tracers 55 INTEGER , PUBLIC :: nutwrs !: output FILE for passive tracers restart 56 INTEGER , PUBLIC :: nutrst !: logical unit for restart FILE for passive tracers 57 INTEGER , PUBLIC :: nn_rsttr !: control of the time step ( 0 or 1 ) for pass. tr. 58 CHARACTER(len=50), PUBLIC :: cn_trcrst_in !: suffix of pass. tracer restart name (input) 59 CHARACTER(len=50), PUBLIC :: cn_trcrst_out !: suffix of pass. tracer restart name (output) 61 60 62 61 !! information for outputs … … 68 67 !! additional 2D/3D outputs namelist 69 68 !! -------------------------------------------------- 70 INTEGER , PUBLIC:: nn_writedia !: frequency of additional arrays outputs(namelist)71 CHARACTER(len= 8), PUBLIC, DIMENSION 72 CHARACTER(len= 8), PUBLIC, DIMENSION 73 CHARACTER(len= 8), PUBLIC, DIMENSION 74 CHARACTER(len= 8), PUBLIC, DIMENSION 75 CHARACTER(len=80), PUBLIC, DIMENSION 76 CHARACTER(len=80), PUBLIC, DIMENSION 69 INTEGER , PUBLIC :: nn_writedia !: frequency of additional arrays outputs(namelist) 70 CHARACTER(len= 8), PUBLIC, DIMENSION(jpdia2d) :: ctrc2d !: 2d output field name 71 CHARACTER(len= 8), PUBLIC, DIMENSION(jpdia2d) :: ctrc2u !: 2d output field unit 72 CHARACTER(len= 8), PUBLIC, DIMENSION(jpdia3d) :: ctrc3d !: 3d output field name 73 CHARACTER(len= 8), PUBLIC, DIMENSION(jpdia3d) :: ctrc3u !: 3d output field unit 74 CHARACTER(len=80), PUBLIC, DIMENSION(jpdia2d) :: ctrc2l !: 2d output field long name 75 CHARACTER(len=80), PUBLIC, DIMENSION(jpdia3d) :: ctrc3l !: 3d output field long name 77 76 78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION 79 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION 77 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:, :) :: trc2d !: additional 2d outputs 78 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trc3d !: additional 3d outputs 80 79 # endif 81 80 … … 90 89 !! Biological trends 91 90 !! ----------------- 92 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trbio !: biological trends91 REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:,:) :: trbio !: biological trends 93 92 # endif 94 93 … … 101 100 102 101 !!---------------------------------------------------------------------- 103 !! NEMO/TOP 3.3 , NEMO Consortium (2010)102 !! NEMO/TOP 3.3.1 , NEMO Consortium (2010) 104 103 !! $Id$ 105 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)104 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 106 105 !!---------------------------------------------------------------------- 107 106 CONTAINS … … 114 113 !!------------------------------------------------------------------- 115 114 ! 116 ALLOCATE( cvol(jpi,jpj,jpk),&117 trn(jpi,jpj,jpk,jptra),&118 tra(jpi,jpj,jpk,jptra),&119 trb(jpi,jpj,jpk,jptra),&120 gtru(jpi,jpj,jptra), gtrv(jpi,jpj,jptra),&115 ALLOCATE( cvol(jpi,jpj,jpk ) , & 116 & trn (jpi,jpj,jpk,jptra) , & 117 & tra (jpi,jpj,jpk,jptra) , & 118 & trb (jpi,jpj,jpk,jptra) , & 119 & gtru(jpi,jpj ,jptra) , gtrv(jpi,jpj,jptra) , & 121 120 # if defined key_diatrc && ! defined key_iomput 122 trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), &121 & trc2d(jpi,jpj,jpdia2d), trc3d(jpi,jpj,jpk,jpdia3d), & 123 122 # endif 124 123 # if defined key_diabio 125 trbio(jpi,jpj,jpk,jpdiabio), &124 & trbio(jpi,jpj,jpk,jpdiabio), & 126 125 #endif 127 rdttrc(jpk) , STAT=trc_alloc )126 rdttrc(jpk) , STAT=trc_alloc ) 128 127 129 128 IF( trc_alloc /= 0 ) CALL ctl_warn('trc_alloc: failed to allocate arrays') -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trcdia.F90
r2643 r2690 57 57 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 58 58 !! $Id$ 59 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)59 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 60 60 !!---------------------------------------------------------------------- 61 61 CONTAINS 62 63 62 64 63 SUBROUTINE trc_dia( kt ) … … 68 67 !! ** Purpose : output passive tracers fields 69 68 !!--------------------------------------------------------------------- 70 INTEGER, INTENT( in ) :: kt 71 INTEGER :: kindic 69 INTEGER, INTENT(in) :: kt ! ocean time-step 70 ! 71 INTEGER :: kindic ! local integer 72 72 !!--------------------------------------------------------------------- 73 73 ! … … 95 95 !! IF kindic >0, output of fields before the time step loop 96 96 !!---------------------------------------------------------------------- 97 INTEGER, INTENT( in ) :: kt! ocean time-step98 INTEGER, INTENT( in ) :: kindic! indicator of abnormal termination99 ! !97 INTEGER, INTENT(in) :: kt ! ocean time-step 98 INTEGER, INTENT(in) :: kindic ! indicator of abnormal termination 99 ! 100 100 INTEGER :: jn 101 101 LOGICAL :: ll_print = .FALSE. … … 216 216 IF( kt == nitend .OR. kindic < 0 ) CALL histclo( nit5 ) 217 217 ! 218 219 218 END SUBROUTINE trcdit_wr 220 219 … … 237 236 !! IF kindic >0, output of fields before the time step loop 238 237 !!---------------------------------------------------------------------- 239 INTEGER, INTENT( in ) :: kt! ocean time-step240 INTEGER, INTENT( in ) :: kindic! indicator of abnormal termination238 INTEGER, INTENT(in) :: kt ! ocean time-step 239 INTEGER, INTENT(in) :: kindic ! indicator of abnormal termination 241 240 !! 242 241 LOGICAL :: ll_print = .FALSE. … … 364 363 # else 365 364 SUBROUTINE trcdii_wr( kt, kindic ) ! Dummy routine 366 INTEGER, INTENT ( in) :: kt, kindic365 INTEGER, INTENT (in) :: kt, kindic 367 366 END SUBROUTINE trcdii_wr 368 367 # endif … … 400 399 ! Initialisation 401 400 ! -------------- 402 403 401 404 402 ! local variable for debugging … … 485 483 IF( kt == nitend .OR. kindic < 0 ) CALL histclo( nitb ) 486 484 ! 487 488 485 END SUBROUTINE trcdib_wr 489 486 … … 500 497 !! *** ROUTINE trc_dia_alloc *** 501 498 !!--------------------------------------------------------------------- 502 503 499 ALLOCATE( ndext50(jpij*jpk), ndext51(jpij), STAT=trc_dia_alloc ) 504 505 IF( trc_dia_alloc /= 0 ) CALL ctl_warn('trc_dia_alloc : failed to allocate arrays.')506 500 ! 501 IF( trc_dia_alloc /= 0 ) CALL ctl_warn('trc_dia_alloc : failed to allocate arrays') 502 ! 507 503 END FUNCTION trc_dia_alloc 508 504 #else -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trcdta.F90
r2649 r2690 23 23 PRIVATE 24 24 25 PUBLIC trc_dta ! called in trcini.F90 and trcdmp.F9026 PUBLIC trc_dta_alloc ! called in nemogcm.F9025 PUBLIC trc_dta ! called in trcini.F90 and trcdmp.F90 26 PUBLIC trc_dta_alloc ! called in nemogcm.F90 27 27 28 28 LOGICAL , PUBLIC, PARAMETER :: lk_dtatrc = .TRUE. !: temperature data flag … … 31 31 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:,:,:) :: tracdta ! tracer data at two consecutive times 32 32 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: nlectr !: switch for reading once 33 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: ntrc1 !: number of first month when reading 12 monthly value34 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: ntrc2 !: number of second month when reading 12 monthly value33 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: ntrc1 !: number of 1st month when reading 12 monthly value 34 INTEGER , ALLOCATABLE, SAVE, DIMENSION(:) :: ntrc2 !: number of 2nd month when reading 12 monthly value 35 35 36 36 !! * Substitutions … … 39 39 !! NEMO/TOP 3.3 , NEMO Consortium (2010) 40 40 !! $Id$ 41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)41 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 42 42 !!---------------------------------------------------------------------- 43 43 CONTAINS … … 56 56 !! two monthly values. 57 57 !!---------------------------------------------------------------------- 58 INTEGER, INTENT( in) :: kt ! ocean time-step58 INTEGER, INTENT(in) :: kt ! ocean time-step 59 59 !! 60 60 CHARACTER (len=39) :: clname(jptra) … … 199 199 END SUBROUTINE trc_dta 200 200 201 201 202 INTEGER FUNCTION trc_dta_alloc() 202 203 !!---------------------------------------------------------------------- 203 204 !! *** ROUTINE trc_dta_alloc *** 204 205 !!---------------------------------------------------------------------- 205 206 ALLOCATE(trdta(jpi,jpj,jpk,jptra), & 207 tracdta(jpi,jpj,jpk,jptra,2), & 208 nlectr(jptra), ntrc1(jptra), ntrc2(jptra), & 209 ! 210 STAT=trc_dta_alloc) 211 212 IF( trc_dta_alloc /= 0 ) CALL ctl_warn('trc_dta_alloc : failed to allocate arrays.') 213 206 ALLOCATE( trdta (jpi,jpj,jpk,jptra ) , & 207 & tracdta(jpi,jpj,jpk,jptra,2) , & 208 & nlectr(jptra) , ntrc1(jptra) , ntrc2(jptra) , STAT=trc_dta_alloc) 209 ! 210 IF( trc_dta_alloc /= 0 ) CALL ctl_warn('trc_dta_alloc : failed to allocate arrays') 211 ! 214 212 END FUNCTION trc_dta_alloc 215 213 -
branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/TOP_SRC/trcini.F90
r2649 r2690 64 64 IF(lwp) WRITE(numout,*) '~~~~~~~' 65 65 66 67 66 CALL top_alloc() ! allocate TOP arrays 68 69 67 70 68 ! ! masked grid volume … … 183 181 !! ** Purpose : Allocate all the dynamic arrays of the OPA modules 184 182 !!---------------------------------------------------------------------- 185 !186 183 USE trcadv , ONLY: trc_adv_alloc ! TOP-related alloc routines... 187 184 USE trc , ONLY: trc_alloc … … 206 203 ! 207 204 ierr = trc_adv_alloc() ! Start of TOP-related alloc routines... 208 ierr = ierr + trc_alloc ()205 ierr = ierr + trc_alloc () 209 206 ierr = ierr + trc_nxt_alloc() 210 207 ierr = ierr + trc_zdf_alloc()
Note: See TracChangeset
for help on using the changeset viewer.