Changeset 7646 for trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
- Timestamp:
- 2017-02-06T10:25:03+01:00 (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/TOP_SRC/PISCES/P4Z/p4zlys.F90
r6945 r7646 11 11 !! ! 2011-02 (J. Simeon, J. Orr) Calcon salinity dependence 12 12 !! 3.4 ! 2011-06 (O. Aumont, C. Ethe) Improvment of calcite dissolution 13 !!---------------------------------------------------------------------- 14 #if defined key_pisces 15 !!---------------------------------------------------------------------- 16 !! 'key_pisces' PISCES bio-model 13 !! 3.6 ! 2015-05 (O. Aumont) PISCES quota 17 14 !!---------------------------------------------------------------------- 18 15 !! p4z_lys : Compute the CaCO3 dissolution … … 22 19 USE trc ! passive tracers common variables 23 20 USE sms_pisces ! PISCES Source Minus Sink variables 21 USE p4zche ! Chemical model 24 22 USE prtctl_trc ! print control for debugging 25 23 USE iom ! I/O manager … … 61 59 INTEGER, INTENT(in) :: kt, knt ! ocean time step 62 60 INTEGER :: ji, jj, jk, jn 63 REAL(wp) :: zalk, zdic, zph, zah2 64 REAL(wp) :: zdispot, zfact, zcalcon, zalka, zaldi 61 REAL(wp) :: zdispot, zfact, zcalcon 65 62 REAL(wp) :: zomegaca, zexcess, zexcess0 66 63 CHARACTER (len=25) :: charout 67 REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zc o3sat, zcaldiss64 REAL(wp), POINTER, DIMENSION(:,:,:) :: zco3, zcaldiss, zhinit, zhi, zco3sat 68 65 !!--------------------------------------------------------------------- 69 66 ! 70 67 IF( nn_timing == 1 ) CALL timing_start('p4z_lys') 71 68 ! 72 CALL wrk_alloc( jpi, jpj, jpk, zco3, zc o3sat, zcaldiss)69 CALL wrk_alloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 73 70 ! 74 71 zco3 (:,:,:) = 0. 75 72 zcaldiss(:,:,:) = 0. 73 zhinit(:,:,:) = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 76 74 ! ------------------------------------------- 77 75 ! COMPUTE [CO3--] and [H+] CONCENTRATIONS 78 76 ! ------------------------------------------- 79 80 DO jn = 1, 5 ! BEGIN OF ITERATION 81 ! 82 DO jk = 1, jpkm1 83 DO jj = 1, jpj 84 DO ji = 1, jpi 85 zfact = rhop(ji,jj,jk) / 1000. + rtrn 86 zph = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9 ! [H+] 87 zdic = trb(ji,jj,jk,jpdic) / zfact 88 zalka = trb(ji,jj,jk,jptal) / zfact 89 ! CALCULATE [ALK]([CO3--], [HCO3-]) 90 zalk = zalka - ( akw3(ji,jj,jk) / zph - zph / ( aphscale(ji,jj,jk) + rtrn ) & 91 & + borat(ji,jj,jk) / ( 1. + zph / akb3(ji,jj,jk) ) ) 92 ! CALCULATE [H+] and [CO3--] 93 zaldi = zdic - zalk 94 zah2 = SQRT( zaldi * zaldi + 4.* ( zalk * ak23(ji,jj,jk) / ak13(ji,jj,jk) ) * ( zdic + zaldi ) ) 95 zah2 = 0.5 * ak13(ji,jj,jk) / zalk * ( zaldi + zah2 ) 96 ! 97 zco3(ji,jj,jk) = zalk / ( 2. + zah2 / ak23(ji,jj,jk) ) * zfact 98 hi(ji,jj,jk) = zah2 * zfact 99 END DO 77 78 CALL solve_at_general(zhinit, zhi) 79 80 DO jk = 1, jpkm1 81 DO jj = 1, jpj 82 DO ji = 1, jpi 83 zco3(ji,jj,jk) = trb(ji,jj,jk,jpdic) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2 & 84 & + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn ) 85 hi(ji,jj,jk) = zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000. 100 86 END DO 101 87 END DO 102 ! 103 END DO 88 END DO 104 89 105 90 ! --------------------------------------------------------- … … 115 100 ! DEVIATION OF [CO3--] FROM SATURATION VALUE 116 101 ! Salinity dependance in zomegaca and divide by rhop/1000 to have good units 117 zcalcon = calcon * ( tsn(ji,jj,jk,jp_sal) / 35._wp )102 zcalcon = calcon * ( salinprac(ji,jj,jk) / 35._wp ) 118 103 zfact = rhop(ji,jj,jk) / 1000._wp 119 104 zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zfact + rtrn ) … … 129 114 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 130 115 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 131 # if defined key_degrad132 zdispot = zdispot * facvol(ji,jj,jk)133 # endif134 116 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 135 117 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 136 118 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution 137 zco3(ji,jj,jk) = zco3(ji,jj,jk) + zcaldiss(ji,jj,jk)138 119 ! 139 120 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) … … 150 131 IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3 * tmask(:,:,:) ) 151 132 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 152 ELSE153 IF( ln_diatrc ) THEN154 trc3d(:,:,:,jp_pcs0_3d ) = -1. * LOG10( hi(:,:,:) ) * tmask(:,:,:)155 trc3d(:,:,:,jp_pcs0_3d + 1) = zco3(:,:,:) * tmask(:,:,:)156 trc3d(:,:,:,jp_pcs0_3d + 2) = zco3sat(:,:,:) * tmask(:,:,:)157 ENDIF158 133 ENDIF 159 134 ! … … 164 139 ENDIF 165 140 ! 166 CALL wrk_dealloc( jpi, jpj, jpk, zco3, zc o3sat, zcaldiss)141 CALL wrk_dealloc( jpi, jpj, jpk, zco3, zcaldiss, zhinit, zhi, zco3sat ) 167 142 ! 168 143 IF( nn_timing == 1 ) CALL timing_stop('p4z_lys') … … 183 158 !! 184 159 !!---------------------------------------------------------------------- 185 INTEGER :: ji, jj, jk186 160 INTEGER :: ios ! Local integer output status for namelist read 187 REAL(wp) :: zcaralk, zbicarb, zco3188 REAL(wp) :: ztmas, ztmas1189 161 190 162 NAMELIST/nampiscal/ kdca, nca … … 212 184 ! 213 185 END SUBROUTINE p4z_lys_init 214 215 #else216 !!======================================================================217 !! Dummy module : No PISCES bio-model218 !!======================================================================219 CONTAINS220 SUBROUTINE p4z_lys( kt ) ! Empty routine221 INTEGER, INTENT( in ) :: kt222 WRITE(*,*) 'p4z_lys: You should not have seen this print! error?', kt223 END SUBROUTINE p4z_lys224 #endif225 186 !!====================================================================== 226 187 END MODULE p4zlys
Note: See TracChangeset
for help on using the changeset viewer.