- Timestamp:
- 2019-12-11T17:15:54+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11943_MERGE_2019/src/TOP/PISCES/P4Z/p4zsms.F90
r11960 r12193 17 17 USE p4zlys ! Calcite saturation 18 18 USE p4zflx ! Gas exchange 19 USE p4z sbc! External source of nutrients19 USE p4zbc ! External source of nutrients 20 20 USE p4zsed ! Sedimentation 21 21 USE p4zint ! time interpolation … … 35 35 INTEGER :: numco2, numnut, numnit ! logical unit for co2 budget 36 36 REAL(wp) :: alkbudget, no3budget, silbudget, ferbudget, po4budget 37 REAL(wp) :: xfact 1, xfact2, xfact337 REAL(wp) :: xfact, xfact1, xfact2, xfact3 38 38 39 39 REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:,:) :: xnegtr ! Array used to indicate negative tracer values … … 64 64 REAL(wp) :: ztra 65 65 CHARACTER (len=25) :: charout 66 REAL(wp), ALLOCATABLE, DIMENSION(:,: ) :: zw2d 67 REAL(wp), ALLOCATABLE, DIMENSION(:,:,: ) :: zw3d 68 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:,:) :: ztrdt ! 4D workspace 69 66 70 !!--------------------------------------------------------------------- 67 71 ! … … 86 90 rfact = r2dttrc 87 91 ! 92 ! trends computation initialisation 93 IF( l_trdtrc ) THEN 94 ALLOCATE( ztrdt(jpi,jpj,jpk,jp_pisces) ) !* store now fields before applying the Asselin filter 95 ztrdt(:,:,:,:) = tr(:,:,:,:,Kmm) 96 ENDIF 97 ! 98 88 99 IF( ( ln_top_euler .AND. kt == nittrc000 ) .OR. ( .NOT.ln_top_euler .AND. kt <= nittrc000 + 1 ) ) THEN 89 100 rfactr = 1. / rfact … … 91 102 rfact2r = 1. / rfact2 92 103 xstep = rfact2 / rday ! Time step duration for biology 104 xfact = 1.e+3 * rfact2r 93 105 IF(lwp) WRITE(numout,*) 94 106 IF(lwp) WRITE(numout,*) ' Passive Tracer time step rfact = ', rfact, ' rdt = ', rdt … … 103 115 ENDIF 104 116 ! 105 IF( ll_ sbc ) CALL p4z_sbc( kt, Kmm) ! external sources of nutrients117 IF( ll_bc ) CALL p4z_bc( kt, Kbb, Kmm, Krhs ) ! external sources of nutrients 106 118 ! 107 119 #if ! defined key_sed_off … … 135 147 END DO 136 148 ! 149 IF( iom_use( 'INTdtAlk' ) .OR. iom_use( 'INTdtDIC' ) .OR. iom_use( 'INTdtFer' ) .OR. & 150 & iom_use( 'INTdtDIN' ) .OR. iom_use( 'INTdtDIP' ) .OR. iom_use( 'INTdtSil' ) ) THEN 151 ! 152 ALLOCATE( zw3d(jpi,jpj,jpk), zw2d(jpi,jpj) ) 153 zw3d(:,:,jpk) = 0. 154 DO jk = 1, jpkm1 155 zw3d(:,:,jk) = xnegtr(:,:,jk) * xfact * e3t(:,:,jk,Kmm) * tmask(:,:,jk) 156 ENDDO 157 ! 158 zw2d(:,:) = 0. 159 DO jk = 1, jpkm1 160 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jptal,Krhs) 161 ENDDO 162 CALL iom_put( 'INTdtAlk', zw2d ) 163 ! 164 zw2d(:,:) = 0. 165 DO jk = 1, jpkm1 166 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpdic,Krhs) 167 ENDDO 168 CALL iom_put( 'INTdtDIC', zw2d ) 169 ! 170 zw2d(:,:) = 0. 171 DO jk = 1, jpkm1 172 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * rno3 * ( tr(:,:,jk,jpno3,Krhs) + tr(:,:,jk,jpnh4,Krhs) ) 173 ENDDO 174 CALL iom_put( 'INTdtDIN', zw2d ) 175 ! 176 zw2d(:,:) = 0. 177 DO jk = 1, jpkm1 178 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * po4r * tr(:,:,jk,jppo4,Krhs) 179 ENDDO 180 CALL iom_put( 'INTdtDIP', zw2d ) 181 ! 182 zw2d(:,:) = 0. 183 DO jk = 1, jpkm1 184 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpfer,Krhs) 185 ENDDO 186 CALL iom_put( 'INTdtFer', zw2d ) 187 ! 188 zw2d(:,:) = 0. 189 DO jk = 1, jpkm1 190 zw2d(:,:) = zw2d(:,:) + zw3d(:,:,jk) * tr(:,:,jk,jpsil,Krhs) 191 ENDDO 192 CALL iom_put( 'INTdtSil', zw2d ) 193 ! 194 DEALLOCATE( zw3d, zw2d ) 195 ENDIF 196 ! 137 197 DO jn = jp_pcs0, jp_pcs1 138 198 tr(:,:,:,jn,Krhs) = 0._wp … … 145 205 ENDIF 146 206 END DO 147 148 207 ! 149 208 IF( l_trdtrc ) THEN 150 209 DO jn = jp_pcs0, jp_pcs1 210 ztrdt(:,:,:,jn) = ( tr(:,:,:,jn,Kbb) - ztrdt(:,:,:,jn) ) * rfact2r 151 211 CALL trd_trc( tr(:,:,:,jn,Krhs), jn, jptra_sms, kt, Kmm ) ! save trends 152 212 END DO 213 DEALLOCATE( ztrdt ) 153 214 END IF 154 215 #endif
Note: See TracChangeset
for help on using the changeset viewer.