Changeset 12928 for NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/TOP/PISCES/P4Z/p4zlys.F90
- Timestamp:
- 2020-05-14T21:46:00+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser
- Property svn:externals
-
old new 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11078_OSMOSIS_IMMERSE_Nurser/src/TOP/PISCES/P4Z/p4zlys.F90
r12178 r12928 35 35 REAL(wp) :: calcon = 1.03E-2 ! mean calcite concentration [Ca2+] in sea water [mole/kg solution] 36 36 37 !! * Substitutions 38 # include "do_loop_substitute.h90" 37 39 !!---------------------------------------------------------------------- 38 40 !! NEMO/TOP 4.0 , NEMO Consortium (2018) … … 43 45 CONTAINS 44 46 45 SUBROUTINE p4z_lys( kt, knt )47 SUBROUTINE p4z_lys( kt, knt, Kbb, Krhs ) 46 48 !!--------------------------------------------------------------------- 47 49 !! *** ROUTINE p4z_lys *** … … 54 56 !!--------------------------------------------------------------------- 55 57 INTEGER, INTENT(in) :: kt, knt ! ocean time step and ??? 58 INTEGER, INTENT(in) :: Kbb, Krhs ! time level indices 56 59 ! 57 60 INTEGER :: ji, jj, jk, jn … … 64 67 IF( ln_timing ) CALL timing_start('p4z_lys') 65 68 ! 66 zco3 (:,:,:) = 0.67 zcaldiss(:,:,:) = 0.68 69 zhinit (:,:,:) = hi(:,:,:) * 1000. / ( rhop(:,:,:) + rtrn ) 69 70 ! … … 72 73 ! ------------------------------------------- 73 74 74 CALL solve_at_general( zhinit, zhi )75 CALL solve_at_general( zhinit, zhi, Kbb ) 75 76 76 DO jk = 1, jpkm1 77 DO jj = 1, jpj 78 DO ji = 1, jpi 79 zco3(ji,jj,jk) = trb(ji,jj,jk,jpdic) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2 & 80 & + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn ) 81 hi (ji,jj,jk) = zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000. 82 END DO 83 END DO 84 END DO 77 DO_3D_11_11( 1, jpkm1 ) 78 zco3(ji,jj,jk) = tr(ji,jj,jk,jpdic,Kbb) * ak13(ji,jj,jk) * ak23(ji,jj,jk) / (zhi(ji,jj,jk)**2 & 79 & + ak13(ji,jj,jk) * zhi(ji,jj,jk) + ak13(ji,jj,jk) * ak23(ji,jj,jk) + rtrn ) 80 hi (ji,jj,jk) = zhi(ji,jj,jk) * rhop(ji,jj,jk) / 1000. 81 END_3D 85 82 86 83 ! --------------------------------------------------------- … … 90 87 ! --------------------------------------------------------- 91 88 92 DO jk = 1, jpkm1 93 DO jj = 1, jpj 94 DO ji = 1, jpi 89 DO_3D_11_11( 1, jpkm1 ) 95 90 96 97 98 99 100 101 91 ! DEVIATION OF [CO3--] FROM SATURATION VALUE 92 ! Salinity dependance in zomegaca and divide by rhop/1000 to have good units 93 zcalcon = calcon * ( salinprac(ji,jj,jk) / 35._wp ) 94 zfact = rhop(ji,jj,jk) / 1000._wp 95 zomegaca = ( zcalcon * zco3(ji,jj,jk) ) / ( aksp(ji,jj,jk) * zfact + rtrn ) 96 zco3sat(ji,jj,jk) = aksp(ji,jj,jk) * zfact / ( zcalcon + rtrn ) 102 97 103 104 105 106 98 ! SET DEGREE OF UNDER-/SUPERSATURATION 99 excess(ji,jj,jk) = 1._wp - zomegaca 100 zexcess0 = MAX( 0., excess(ji,jj,jk) ) 101 zexcess = zexcess0**nca 107 102 108 ! AMOUNT CACO3 (12C) THAT RE-ENTERS SOLUTION 109 ! (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 110 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 111 zdispot = kdca * zexcess * trb(ji,jj,jk,jpcal) 112 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 113 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 114 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution 115 ! 116 tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2. * zcaldiss(ji,jj,jk) 117 tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) - zcaldiss(ji,jj,jk) 118 tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) + zcaldiss(ji,jj,jk) 119 END DO 120 END DO 121 END DO 103 ! AMOUNT CACO3 (12C) THAT RE-ENTERS SOLUTION 104 ! (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE 105 ! CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION) 106 zdispot = kdca * zexcess * tr(ji,jj,jk,jpcal,Kbb) 107 ! CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3], 108 ! AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION 109 zcaldiss(ji,jj,jk) = zdispot * rfact2 / rmtss ! calcite dissolution 110 ! 111 tr(ji,jj,jk,jptal,Krhs) = tr(ji,jj,jk,jptal,Krhs) + 2. * zcaldiss(ji,jj,jk) 112 tr(ji,jj,jk,jpcal,Krhs) = tr(ji,jj,jk,jpcal,Krhs) - zcaldiss(ji,jj,jk) 113 tr(ji,jj,jk,jpdic,Krhs) = tr(ji,jj,jk,jpdic,Krhs) + zcaldiss(ji,jj,jk) 114 END_3D 122 115 ! 123 116 124 117 IF( lk_iomput .AND. knt == nrdttrc ) THEN 125 IF( iom_use( "PH" ) ) CALL iom_put( "PH" , -1. * LOG10( MAX( hi(:,:,:), rtrn ) ) * tmask(:,:,:) ) 126 IF( iom_use( "CO3" ) ) CALL iom_put( "CO3" , zco3(:,:,:) * 1.e+3 * tmask(:,:,:) ) 127 IF( iom_use( "CO3sat" ) ) CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3 * tmask(:,:,:) ) 128 IF( iom_use( "DCAL" ) ) CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 118 CALL iom_put( "PH" , -1. * LOG10( MAX( hi(:,:,:), rtrn ) ) * tmask(:,:,:) ) 119 IF( iom_use( "CO3" ) ) THEN 120 zco3(:,:,jpk) = 0. ; CALL iom_put( "CO3" , zco3(:,:,:) * 1.e+3 * tmask(:,:,:) ) 121 ENDIF 122 IF( iom_use( "CO3sat" ) ) THEN 123 zco3sat(:,:,jpk) = 0. ; CALL iom_put( "CO3sat", zco3sat(:,:,:) * 1.e+3 * tmask(:,:,:) ) 124 ENDIF 125 IF( iom_use( "DCAL" ) ) THEN 126 zcaldiss(:,:,jpk) = 0. ; CALL iom_put( "DCAL" , zcaldiss(:,:,:) * 1.e+3 * rfact2r * tmask(:,:,:) ) 127 ENDIF 129 128 ENDIF 130 129 ! 131 IF( ln_ctl) THEN ! print mean trends (used for debugging)130 IF(sn_cfctl%l_prttrc) THEN ! print mean trends (used for debugging) 132 131 WRITE(charout, FMT="('lys ')") 133 132 CALL prt_ctl_trc_info(charout) 134 CALL prt_ctl_trc(tab4d=tr a, mask=tmask, clinfo=ctrcnm)133 CALL prt_ctl_trc(tab4d=tr(:,:,:,:,Krhs), mask=tmask, clinfo=ctrcnm) 135 134 ENDIF 136 135 ! … … 162 161 ENDIF 163 162 ! 164 REWIND( numnatp_ref ) ! Namelist nampiscal in reference namelist : Pisces CaCO3 dissolution165 163 READ ( numnatp_ref, nampiscal, IOSTAT = ios, ERR = 901) 166 164 901 IF( ios /= 0 ) CALL ctl_nam ( ios , 'nampiscal in reference namelist' ) 167 REWIND( numnatp_cfg ) ! Namelist nampiscal in configuration namelist : Pisces CaCO3 dissolution168 165 READ ( numnatp_cfg, nampiscal, IOSTAT = ios, ERR = 902 ) 169 166 902 IF( ios > 0 ) CALL ctl_nam ( ios , 'nampiscal in configuration namelist' )
Note: See TracChangeset
for help on using the changeset viewer.