New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
p4zlys.F90 in trunk/NEMO/TOP_SRC/PISCES – NEMO

source: trunk/NEMO/TOP_SRC/PISCES/p4zlys.F90 @ 1329

Last change on this file since 1329 was 1329, checked in by cetlod, 15 years ago

update modules to take into account the mask land points in NetCDF outputs, see ticket:322

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 8.1 KB
Line 
1MODULE p4zlys
2   !!======================================================================
3   !!                         ***  MODULE p4zlys  ***
4   !! TOP :   PISCES
5   !!======================================================================
6   !! History :    -   !  1988-07  (E. MAIER-REIMER) Original code
7   !!              -   !  1998     (O. Aumont) additions
8   !!              -   !  1999     (C. Le Quere) modifications
9   !!             1.0  !  2004     (O. Aumont) modifications
10   !!             2.0  !  2007-12  (C. Ethe, G. Madec)  F90
11   !!----------------------------------------------------------------------
12#if defined key_pisces
13   !!----------------------------------------------------------------------
14   !!   'key_pisces'                                       PISCES bio-model
15   !!----------------------------------------------------------------------
16   !!   p4z_lys        :   Compute the CaCO3 dissolution
17   !!   p4z_lys_init   :   Read the namelist parameters
18   !!----------------------------------------------------------------------
19   USE trc
20   USE oce_trc         !
21   USE trc
22   USE sms_pisces
23   USE prtctl_trc
24
25   IMPLICIT NONE
26   PRIVATE
27
28   PUBLIC   p4z_lys    ! called in p4zprg.F90
29
30   !! * Shared module variables
31   REAL(wp), PUBLIC ::   &
32     kdca = 0.327e3_wp   ,  &  !:
33     nca  = 1.0_wp             !:
34
35   !! * Module variables
36   REAL(wp) :: &
37      calcon = 1.03E-2        ! mean calcite concentration [Ca2+] in sea water [mole/kg solution]
38
39   !!----------------------------------------------------------------------
40   !! NEMO/TOP 2.0 , LOCEAN-IPSL (2007)
41   !! $Id$
42   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt)
43   !!----------------------------------------------------------------------
44
45CONTAINS
46
47   SUBROUTINE p4z_lys( kt )
48      !!---------------------------------------------------------------------
49      !!                     ***  ROUTINE p4z_lys  ***
50      !!
51      !! ** Purpose :   CALCULATES DEGREE OF CACO3 SATURATION IN THE WATER
52      !!                COLUMN, DISSOLUTION/PRECIPITATION OF CACO3 AND LOSS
53      !!                OF CACO3 TO THE CACO3 SEDIMENT POOL.
54      !!
55      !! ** Method  : - ???
56      !!---------------------------------------------------------------------
57      INTEGER, INTENT(in) ::   kt ! ocean time step
58      INTEGER  ::   ji, jj, jk, jn
59      REAL(wp) ::   zbot, zalk, zdic, zph, zremco3, zah2
60      REAL(wp) ::   zdispot, zfact, zalka
61      REAL(wp) ::   zomegaca, zexcess, zexcess0
62      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   zco3
63      CHARACTER (len=25) :: charout
64      !!---------------------------------------------------------------------
65
66      IF( kt == nittrc000  )   CALL p4z_lys_init      ! Initialization (first time-step only)
67
68      zco3(:,:,:) = 0.
69
70      !     -------------------------------------------
71      !     COMPUTE [CO3--] and [H+] CONCENTRATIONS
72      !     -------------------------------------------
73     
74      DO jn = 1, 5                               !  BEGIN OF ITERATION
75         !
76!CDIR NOVERRCHK
77         DO jk = 1, jpkm1
78!CDIR NOVERRCHK
79            DO jj = 1, jpj
80!CDIR NOVERRCHK
81               DO ji = 1, jpi
82
83                  ! SET DUMMY VARIABLE FOR TOTAL BORATE
84                  zbot  = borat(ji,jj,jk)
85                  zfact = rhop (ji,jj,jk) / 1000. + rtrn
86
87                  ! SET DUMMY VARIABLE FOR [H+]
88                  zph   = hi(ji,jj,jk) * tmask(ji,jj,jk) / zfact + ( 1.-tmask(ji,jj,jk) ) * 1.e-9
89
90                  ! SET DUMMY VARIABLE FOR [SUM(CO2)]GIVEN
91                  zdic  = trn(ji,jj,jk,jpdic) / zfact
92                  zalka = trn(ji,jj,jk,jptal) / zfact
93
94                  ! CALCULATE [ALK]([CO3--], [HCO3-])
95                  zalk  = zalka - (  akw3(ji,jj,jk) / zph - zph   &
96                     &             + zbot / (1.+ zph / akb3(ji,jj,jk) )  )
97
98                  ! CALCULATE [H+] and [CO3--]
99                  zah2 = SQRT( (zdic-zalk)*(zdic-zalk)+   &
100                     &     4.*(zalk*ak23(ji,jj,jk)/ak13(ji,jj,jk))   &
101                     &     *(2*zdic-zalk))
102
103                  zah2=0.5*ak13(ji,jj,jk)/zalk*((zdic-zalk)+zah2)
104                  zco3(ji,jj,jk) = zalk/(2.+zah2/ak23(ji,jj,jk))*zfact
105
106                  hi(ji,jj,jk)  = zah2*zfact
107
108               END DO
109            END DO
110         END DO
111         !
112      END DO 
113
114      !     ---------------------------------------------------------
115      !        CALCULATE DEGREE OF CACO3 SATURATION AND CORRESPONDING
116      !        DISSOLOUTION AND PRECIPITATION OF CACO3 (BE AWARE OF
117      !        MGCO3)
118      !     ---------------------------------------------------------
119
120      DO jk = 1, jpkm1
121         DO jj = 1, jpj
122            DO ji = 1, jpi
123
124               ! DEVIATION OF [CO3--] FROM SATURATION VALUE
125               zomegaca = ( calcon * zco3(ji,jj,jk) ) / aksp(ji,jj,jk)
126
127               ! SET DEGREE OF UNDER-/SUPERSATURATION
128               zexcess0 = MAX( 0., ( 1.- zomegaca ) )
129               zexcess  = zexcess0**nca
130
131               ! AMOUNT CACO3 (12C) THAT RE-ENTERS SOLUTION
132               !       (ACCORDING TO THIS FORMULATION ALSO SOME PARTICULATE
133               !       CACO3 GETS DISSOLVED EVEN IN THE CASE OF OVERSATURATION)
134# if defined key_off_degrad
135              zdispot = kdca * zexcess * trn(ji,jj,jk,jpcal) * facvol(ji,jj,jk)
136# else
137              zdispot = kdca * zexcess * trn(ji,jj,jk,jpcal)
138# endif
139
140              !  CHANGE OF [CO3--] , [ALK], PARTICULATE [CACO3],
141              !       AND [SUM(CO2)] DUE TO CACO3 DISSOLUTION/PRECIPITATION
142              zremco3 = zdispot / rmoss
143              zco3(ji,jj,jk) = zco3(ji,jj,jk) + zremco3 * rfact
144              tra(ji,jj,jk,jptal) = tra(ji,jj,jk,jptal) + 2.*zremco3
145              tra(ji,jj,jk,jpcal) = tra(ji,jj,jk,jpcal) -    zremco3
146              tra(ji,jj,jk,jpdic) = tra(ji,jj,jk,jpdic) +    zremco3
147
148            END DO
149         END DO
150      END DO
151
152# if defined key_trc_diaadd &&  defined key_trc_dia3d
153      DO jk = 1, jpk
154         DO jj = 1, jpj
155            DO ji = 1, jpi
156               trc3d(ji,jj,jk,jp_pcs0_3d    ) = hi  (ji,jj,jk)          * tmask(ji,jj,jk)
157               trc3d(ji,jj,jk,jp_pcs0_3d + 1) = zco3(ji,jj,jk)          * tmask(ji,jj,jk)
158               trc3d(ji,jj,jk,jp_pcs0_3d + 2) = aksp(ji,jj,jk) / calcon * tmask(ji,jj,jk)
159            ENDDO
160         ENDDO
161      ENDDO
162# endif
163      !
164       IF(ln_ctl)   THEN  ! print mean trends (used for debugging)
165         WRITE(charout, FMT="('lys ')")
166         CALL prt_ctl_trc_info(charout)
167         CALL prt_ctl_trc(tab4d=tra, mask=tmask, clinfo=ctrcnm)
168       ENDIF
169
170   END SUBROUTINE p4z_lys
171
172   SUBROUTINE p4z_lys_init
173
174      !!----------------------------------------------------------------------
175      !!                  ***  ROUTINE p4z_lys_init  ***
176      !!
177      !! ** Purpose :   Initialization of CaCO3 dissolution parameters
178      !!
179      !! ** Method  :   Read the nampiscal namelist and check the parameters
180      !!      called at the first timestep (nittrc000)
181      !!
182      !! ** input   :   Namelist nampiscal
183      !!
184      !!----------------------------------------------------------------------
185
186      NAMELIST/nampiscal/ kdca, nca
187
188      REWIND( numnat )                     ! read numnat
189      READ  ( numnat, nampiscal )
190
191      IF(lwp) THEN                         ! control print
192         WRITE(numout,*) ' '
193         WRITE(numout,*) ' Namelist parameters for CaCO3 dissolution, nampiscal'
194         WRITE(numout,*) ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~'
195         WRITE(numout,*) '    diss. rate constant calcite (per month)   kdca      =', kdca
196         WRITE(numout,*) '    order of reaction for calcite dissolution nca       =', nca
197      ENDIF
198
199   END SUBROUTINE p4z_lys_init
200
201#else
202   !!======================================================================
203   !!  Dummy module :                                   No PISCES bio-model
204   !!======================================================================
205CONTAINS
206   SUBROUTINE p4z_lys( kt )                   ! Empty routine
207      INTEGER, INTENT( in ) ::   kt
208      WRITE(*,*) 'p4z_lys: You should not have seen this print! error?', kt
209   END SUBROUTINE p4z_lys
210#endif 
211
212   !!======================================================================
213END MODULE  p4zlys
Note: See TracBrowser for help on using the repository browser.