source: Roms_tools/Roms_Agrif/PISCES/p4zsink2.F @ 1

Last change on this file since 1 was 1, checked in by cholod, 13 years ago

import Roms_Agrif

File size: 5.2 KB
Line 
1!
2!=========================================================================
3! ROMS_AGRIF is a branch of ROMS developped at IRD and INRIA, in France.
4! The two other branches, from UCLA (Shchepetkin et al)
5! and Rutgers University (Arango et al), are under MIT/X style license.
6! ROMS_AGRIF specific routines (nesting) are under CeCILL-C license.
7!
8! ROMS_AGRIF website : http://roms.mpl.ird.fr
9!=========================================================================
10!
11      SUBROUTINE p4zsink2(Istr,Iend,Jstr,Jend,wstmp,sinktemp,jn,rfacts)
12#include "cppdefs.h"
13      Implicit NONE
14      INTEGER Istr,Jstr,Iend,Jend,jn
15      REAL rfacts
16
17#if defined key_passivetrc && defined key_trc_pisces
18!!!
19!!!       p4zsink2 : PISCES model
20!!!       ***********************
21!!!
22!!
23!!  PURPOSE :
24!!  ---------
25!!     Compute the sedimentation terms for the various sinking
26!!     particles. The scheme used to compute the trends is based
27!!     on MUSCL.
28!!
29!!   METHOD :
30!!   -------
31!!      this ROUTINE compute not exactly the advection but the
32!!      transport term, i.e.  div(u*tra).
33!!
34!!
35!!   REFERENCES :               
36!!   ----------                 
37!!
38!!   References :
39!!      Estubier, A., and M. Levy, Notes Techn. Pole de Modelisation
40!!      IPSL, Sept. 2000 (http://www.lodyc.jussieu.fr/opa)
41!!
42!!
43!!   MODIFICATIONS:
44!!   --------------
45!!       original :  06-00 (A.Estublier)
46!!       modifications : 2004 (O. Aumont)
47!!       
48!!----------------------------------------------------------------------
49CC ----------------------------------------------------------------
50CC parameters and commons
51CC ======================
52#include "param.h"
53#include "parameter.h"
54#include "common.h"
55#define PRIV_3D_BIOARRAY Istr:Iend,Jstr:Jend,1:jpk
56CC-----------------------------------------------------------------
57CC local declarations
58CC ==================
59C
60      INTEGER ji,jj,jk,jnt
61      REAL ztraz(Istr:Iend,Jstr:Jend,jpk+1)
62      REAL zakz(Istr:Iend,Jstr:Jend,jpk+1)
63      REAL zkz(PRIV_3D_BIOARRAY)
64      REAL zigma,zew,zstep,zign
65      REAL wstmp(jpi,jpj,jpk)
66      REAL sinktemp(jpi,jpj,jpk+1)
67
68      REAL wstmp2(Istr:Iend,Jstr:Jend,jpk+1)
69
70!!!---------------------------------------------------------------------
71!!!  OPA8, LODYC (01/00)
72!!!---------------------------------------------------------------------
73! 1. Initialization
74! --------------
75
76        zstep=rfacts
77
78        ztraz  = 0
79        zkz    = 0
80        zakz   = 0.
81
82      DO jk=1,jpkm1
83        DO jj=Jstr, Jend
84          DO ji=Istr, Iend
85         wstmp2(ji,jj,jk+1)=-wstmp(ji,jj,jk)/rjjss*tmask(ji,jj,jk+1)
86          end do
87         end do
88      end do
89 
90      DO jj=Jstr, Jend
91        DO ji=Istr, Iend
92        wstmp2(ji,jj,1)=0.
93        wstmp2(ji,jj,jpk+1)=0.
94        END DO
95      END DO
96!
97! 3. Vertical advective flux
98!-------------------------------
99! ... first guess of the slopes
100!   ... interior values
101!
102       do jnt=1,2
103        DO jk=2,jpk
104          DO jj=Jstr, Jend
105            DO ji=Istr, Iend
106              ztraz(ji,jj,jk) =(trn(ji,jj,jk-1,jn)-trn(ji,jj,jk,jn))
107     $                          *tmask(ji,jj,jk)
108            END DO
109          END DO
110        END DO
111!
112      DO jj=Jstr, Jend
113        DO ji=Istr, Iend
114        ztraz(ji,jj,jpk+1)=0.
115        END DO
116      END DO
117!
118! slopes
119!
120        DO jk=2,jpk
121          DO jj=Jstr, Jend
122            DO ji=Istr, Iend
123            zign = 0.5*(sign(1.,ztraz(ji,jj,jk)*ztraz(ji,jj,jk+1))+1)
124            zakz(ji,jj,jk) = 0.5*(ztraz(ji,jj,jk)
125     $                          +ztraz(ji,jj,jk+1))*zign
126            ENDDO
127          ENDDO
128        ENDDO       
129!
130! Slopes limitation
131!
132        DO jk=2,jpk
133          DO jj=Jstr, Jend
134            DO ji=Istr, Iend
135              zakz(ji,jj,jk) = sign(1.,zakz(ji,jj,jk)) * 
136     $                        min(abs(zakz(ji,jj,jk)),
137     $                        2.*abs(ztraz(ji,jj,jk+1)),
138     $                        2.*abs(ztraz(ji,jj,jk)))
139            ENDDO
140          ENDDO
141        ENDDO       
142
143! vertical advective flux
144        DO jk=1,jpk
145          DO jj=Jstr, Jend
146            DO ji=Istr, Iend
147              zigma = wstmp2(ji,jj,jk+1)*zstep/fse3w(ji,jj,jk+1)
148              zew   = wstmp2(ji,jj,jk+1)
149              sinktemp(ji,jj,jk+1) = -zew*(trn(ji,jj,jk,jn)
150     $           -0.5*(1+zigma)*zakz(ji,jj,jk))*zstep
151            ENDDO
152          ENDDO
153        ENDDO 
154!
155! Boundary conditions
156!
157      DO jj=Jstr, Jend
158        DO ji=Istr, Iend
159         sinktemp(ji,jj,1)=0.
160         sinktemp(ji,jj,jpk+1)=0.
161        END DO
162      END DO
163!
164       DO jk=1,jpk
165         DO jj=Jstr, Jend
166           DO ji=Istr, Iend
167!
168            trn(ji,jj,jk,jn) = trn(ji,jj,jk,jn)
169     &        + (sinktemp(ji,jj,jk)-sinktemp(ji,jj,jk+1))
170     &        /fse3t(ji,jj,jk)
171!
172            ENDDO
173          ENDDO
174        ENDDO
175        ENDDO
176!
177        DO jk=1,jpk
178          DO jj=Jstr, Jend
179            DO ji=Istr, Iend
180!
181            trb(ji,jj,jk,jn) = trb(ji,jj,jk,jn)
182     &        + 2.*(sinktemp(ji,jj,jk)-sinktemp(ji,jj,jk+1))
183     &        /fse3t(ji,jj,jk)
184!
185            ENDDO
186          ENDDO
187        ENDDO
188
189       DO jk=1,jpk
190         DO jj=Jstr, Jend
191           DO ji=Istr, Iend
192        trn(ji,jj,jk,jn)=trb(ji,jj,jk,jn)
193           ENDDO
194         ENDDO
195       ENDDO
196!
197#else
198
199      REAL wstmp
200      REAL sinktemp
201
202#endif
203C
204      RETURN
205      END
206
Note: See TracBrowser for help on using the repository browser.