source: trunk/LMDZ.TITAN.old/libf/phytitan/calchim.F @ 3303

Last change on this file since 3303 was 1543, checked in by emillour, 9 years ago

All models: Further adaptations to keep up with changes in LMDZ5 concerning
physics/dynamics separation:

  • dyn3d:
  • adapted gcm.F so that all physics initializations are now done in iniphysiq.
  • dyn3dpar:
  • adapted gcm.F so that all physics initializations are now done in iniphysiq.
  • updated calfis_p.F to follow up with changes.
  • copied over updated "bands.F90" from LMDZ5.
  • dynphy_lonlat:
  • calfis_p.F90, mod_interface_dyn_phys.F90, follow up of changes in phy_common/mod_* routines
  • phy_common:
  • added "geometry_mod.F90" to store information about the grid (replaces phy*/comgeomphy.F90) and give variables friendlier names: rlond => longitude , rlatd => latitude, airephy => cell_area, cuphy => dx , cvphy => dy
  • added "physics_distribution_mod.F90"
  • updated "mod_grid_phy_lmdz.F90", "mod_phys_lmdz_mpi_data.F90", "mod_phys_lmdz_para.F90", "mod_phys_lmdz_mpi_transfert.F90", "mod_grid_phy_lmdz.F90", "mod_phys_lmdz_omp_data.F90", "mod_phys_lmdz_omp_transfert.F90", "write_field_phy.F90" and "ioipsl_getin_p_mod.F90" to LMDZ5 versions.
  • phy[venus/titan/mars/std]:
  • removed "init_phys_lmdz.F90", "comgeomphy.F90"; adapted routines to use geometry_mod (longitude, latitude, cell_area, etc.)

EM

File size: 18.4 KB
Line 
1      SUBROUTINE calchim(nlon,ny,qy_c,nomqy_c,declin_rad,ls_rad,dtchim,
2     .                   ctemp,cplay,cplev,czlay,czlev,
3     .                   dqyc)
4     
5c-------------------------------------------------
6
7c     Introduction d une routine chimique
8c
9c     Auteur: S. Lebonnois,  01/2000 | 09/2003
10c            adaptation pour Titan 3D: 02/2009
11c            adaptation pour // : 04/2013
12c            extension chimie jusqu a 1300km : 10/2013
13c
14c-------------------------------------------------
15c
16      use dimphy
17      use common_mod, only:utilaer,maer,prodaer,csn,csh,psurfhaze,
18     .                     NLEV,NLRT,NC,ND,NR
19      USE moyzon_mod, only: tmoy,playmoy,zlaymoy,zlevmoy,klat
20      use mod_grid_phy_lmdz, only: nbp_lat
21      implicit none
22#include "clesphys.h"
23#include "YOMCST.h"
24
25c    Arguments
26c    ---------
27
28      INTEGER      nlon                   ! nb of horiz points
29      INTEGER      ny                     ! nb de composes (nqmax-nmicro)
30      REAL         qy_c(nlon,klev,NC)     ! Especes chimiques apres adv.+diss.
31      character*10 nomqy_c(NC+1)          ! Noms des especes chimiques
32      REAL         declin_rad,ls_rad      ! declinaison et long solaire en radians
33      REAL         dtchim                 ! pas de temps chimie
34      REAL         ctemp(nlon,klev)      ! Temperature
35      REAL         cplay(nlon,klev)      ! pression (Pa)
36      REAL         cplev(nlon,klev+1)    ! pression intercouches (Pa)
37      REAL         czlay(nlon,klev)      ! altitude (m)
38      REAL         czlev(nlon,klev+1)    ! altitude intercouches (m)
39     
40      REAL         dqyc(nlon,klev,NC)    ! Tendances especes chimiques
41     
42c    Local variables :
43c    -----------------
44
45      integer i,j,l,ic,jm1
46
47c variables envoyees dans la chimie: double precision
48
49      REAL  temp_c(NLEV)
50      REAL  press_c(NLEV)   ! T,p(mbar) a 1 lat donnee
51      REAL  cqy(NLEV,NC)    ! frac mol qui seront modifiees
52      REAL  cqy0(NLEV,NC)    ! frac mol avant modif
53      REAL  surfhaze(NLEV)
54      REAL  cprodaer(NLEV,4),cmaer(NLEV,4)
55      REAL  ccsn(NLEV,4),ccsh(NLEV,4)
56! rmil: milieu de couche, grille pour K,D,p,ct,T,y
57! rinter: intercouche (grille RA dans la chimie)
58      REAL  rmil(NLEV),rinter(NLEV),nb(NLEV)
59      REAL,save :: kedd(NLEV)
60
61      REAL  a,b
62      character str1*1,str2*2
63      REAL  latit
64      character*20 formt1,formt2,formt3
65     
66c     variables locales initialisees au premier appel
67
68      LOGICAL firstcal
69      DATA    firstcal/.true./
70      SAVE    firstcal
71     
72      integer dec,declinint,ialt
73      REAL  declin_c                       ! declinaison en degres
74      real  factalt,factdec,krpddec,krpddecp1,krpddecm1
75      real  duree
76      REAL,save :: mass(NC)
77      REAL,save,allocatable :: md(:,:)
78      REAL,save :: botCH4
79      DATA  botCH4/0.05/
80      real,save ::  r1d(131),ct1d(131),p1d(131),t1d(131) ! lecture tcp.ver
81      REAL,save,allocatable :: krpd(:,:,:,:),krate(:,:)
82      integer,save :: reactif(5,NR),nom_prod(NC),nom_perte(NC)
83      integer,save :: prod(200,NC),perte(2,200,NC)
84      character  dummy*30,fich*7,ficdec*15,curdec*15,name*10
85      real  ficalt,oldq,newq,zalt
86      logical okfic
87
88c-----------------------------------------------------------------------
89c***********************************************************************
90c
91c    Initialisations :
92c    ----------------
93
94      duree = dtchim  ! passage en real*4 pour appel a routines C
95
96      IF (firstcal) THEN
97           
98        print*,'CHIMIE, premier appel'
99       
100c ************************************
101c Au premier appel, initialisation de toutes les variables
102c pour les routines de la chimie.
103c ************************************
104
105        allocate(krpd(15,ND+1,NLRT,nbp_lat),krate(NLEV,NR),md(NLEV,NC))
106
107c Verification du nombre de composes: coherence common_mod et nqmax-nmicro
108c ----------------------------------
109
110        if (ny.ne.NC) then
111           print*,'PROBLEME de coherence dans le nombre de composes:'
112     .           ,ny,NC
113           STOP
114        endif
115
116c calcul de temp_c, densites et press_c en moyenne planetaire :
117c --------------------------------------------------------------
118
119        print*,'pression, densites et temp (init chimie):'
120        print*,'level, press_c, nb, temp_c'
121        DO l=1,klev
122         rinter(l)  = (zlevmoy(l)+RA)/1000.
123         rmil(l)    = (zlaymoy(l)+RA)/1000.
124c     temp_c (K):
125         temp_c(l)  = tmoy(l)
126c     press_c (mbar):
127         press_c(l) = playmoy(l)/100.
128c     nb (cm-3):
129         nb(l) = 1.e-4*press_c(l) / (RKBOL*temp_c(l))
130         print*,l,rmil(l)-RA/1000.,press_c(l),nb(l),temp_c(l)
131        ENDDO
132        rinter(klev+1)=(zlevmoy(klev+1)+RA)/1000.
133
134c au-dessus du GCM, dr regulier et rinter(NLEV)=1290+2575 km.
135       do l=klev+2,NLEV
136         rinter(l) = rinter(klev+1)
137     &          + (l-klev-1)*(3865.-rinter(klev+1))/(NLEV-klev-1)
138         rmil(l-1) = (rinter(l-1)+rinter(l))/2.
139       enddo
140       rmil(NLEV) = rinter(NLEV)+(rinter(NLEV)-rinter(NLEV-1))/2.
141
142c lecture de tcp.ver, une seule fois
143c remplissage r1d,t1d,ct1d,p1d
144        open(11,file='../../INPUT/tcp.ver',status='old')
145        read(11,*) dummy
146        do i=1,131
147          read(11,*) r1d(i),t1d(i),ct1d(i),p1d(i)
148c         print*,"TCP.VER ",r1d(i),t1d(i),ct1d(i),p1d(i)
149        enddo
150        close(11)
151
152c extension pour klev+1 a NLEV avec tcp.ver
153c la jonction klev/klev+1 est brutale... Tant pis ?
154        ialt=1
155        do l=klev+1,NLEV
156           zalt=rmil(l)-RA/1000.
157           do i=ialt,130
158            if ((zalt.ge.r1d(i)).and.(zalt.lt.r1d(i+1))) then
159              ialt=i
160            endif
161           enddo
162           factalt = (zalt-r1d(ialt))/(r1d(ialt+1)-r1d(ialt))
163           press_c(l) = exp(  log(p1d(ialt))   * (1-factalt)
164     &                      + log(p1d(ialt+1)) * factalt    )
165           nb(l)      = exp(  log(ct1d(ialt))   * (1-factalt)
166     &                      + log(ct1d(ialt+1)) * factalt    )
167           temp_c(l)  = t1d(ialt) * (1-factalt) + t1d(ialt+1) * factalt
168           print*,l,zalt,press_c(l),nb(l),temp_c(l)
169        enddo
170       
171c caracteristiques des composes:       
172c -----------------------------
173        mass(:) = 0.0
174        call comp(nomqy_c,nb,temp_c,mass,md)
175        print*,'           Mass'
176        do ic=1,NC
177          print*,nomqy_c(ic),mass(ic)
178c         if(nomqy_c(ic).eq.'CH4') print*,"MD=",md(:,ic)
179        enddo
180       
181
182c  Stockage des composes utilises dans la prod d aerosols
183c     (aerprod=1) et dans H-> H2 (htoh2=1): utilaer
184c     ! decalage de 1 car utilise dans le c !
185
186        do ic=1,NC
187
188c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
189c!!!remise de CH4 a 1.5%!!!!!!!!!!!!!!!!!!!!!!
190c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
191c         if (nomqy_c(ic).eq."CH4") then
192c           do l=1,llm
193c            do j=1,ip1jmp1
194c              if (qy_c(j,l,ic).le.0.015) qy_c(j,l,ic) = 0.015
195c            enddo
196c           enddo
197c         endif
198c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
199         
200          if (nomqy_c(ic).eq."C4H2") then
201            utilaer(10) = ic-1
202          endif
203          if (nomqy_c(ic).eq."HCN") then
204            utilaer(6)  = ic-1
205          endif
206          if (nomqy_c(ic).eq."HC3N") then
207            utilaer(7)  = ic-1
208          endif
209          if (nomqy_c(ic).eq."NCCN") then
210            utilaer(14) = ic-1
211          endif
212          if (nomqy_c(ic).eq."CH3CN") then
213            utilaer(15) = ic-1
214            utilaer(16) = ic-1 ! si pas C2H3CN, CH3CN utilise, mais reac. nulle
215          endif
216          if (nomqy_c(ic).eq."H") then
217            utilaer(1)  = ic-1
218          endif
219          if (nomqy_c(ic).eq."H2") then
220            utilaer(2)  = ic-1
221          endif
222          if (nomqy_c(ic).eq."C2H2") then
223            utilaer(3)  = ic-1
224          endif
225          if (nomqy_c(ic).eq."AC6H6") then
226            utilaer(13) = ic-1
227          endif
228          if (nomqy_c(ic).eq."C2H3CN") then
229            utilaer(16) = ic-1
230          endif
231          if (nomqy_c(ic).eq."C2") then
232            utilaer(4)  = ic-1
233          endif
234          if (nomqy_c(ic).eq."C2H") then
235            utilaer(5)  = ic-1
236          endif
237          if (nomqy_c(ic).eq."C3N") then
238            utilaer(8)  = ic-1
239          endif
240          if (nomqy_c(ic).eq."H2CN") then
241            utilaer(9)  = ic-1
242          endif
243          if (nomqy_c(ic).eq."C4H3") then
244            utilaer(11) = ic-1
245          endif
246          if (nomqy_c(ic).eq."AC6H5") then
247            utilaer(12) = ic-1
248          endif
249
250c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
251c         if ((nomqy_c(ic).eq."HC3N").or.
252c    $        (nomqy_c(ic).eq."C3N")) then
253c     DO j=1,ip1jmp1
254c       do l=1,34  ! p>~ 1 mbar
255c         qy_c(j,l,ic) = 1.e-30
256c       enddo
257c     ENDDO
258c         endif
259c!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
260
261        enddo
262               
263c taux de photodissociations:
264c --------------------------
265        call disso(krpd,nbp_lat)
266
267c reactions chimiques:
268c -------------------
269        call chimie(nomqy_c,nb,temp_c,krate,reactif,
270     .               nom_perte,nom_prod,perte,prod)
271c        print*,'nom_prod, nom_perte:'
272c        do ic=1,NC
273c          print*,nom_prod(ic),nom_perte(ic)
274c        enddo
275c        print*,'premieres prod, perte(1:reaction,2:compagnon):'
276c        do ic=1,NC
277c          print*,prod(1,ic),perte(1,1,ic),perte(2,1,ic)
278c        enddo
279
280c       l = klev-3
281c       print*,'krate a p=',press_c(l),' reactifs et produits:'
282c       do ic=1,ND+1
283c         print*,ic,krpd(7,ic,l,4)*nb(l),"  ",
284c    .     nomqy_c(reactif(1,ic)+1),
285c    .     nomqy_c(reactif(2,ic)+1),nomqy_c(reactif(3,ic)+1),
286c    .     nomqy_c(reactif(4,ic)+1),nomqy_c(reactif(5,ic)+1)
287c       enddo
288c       do ic=ND+2,NR
289c         print*,ic,krate(l,ic),"  ",
290c    .     nomqy_c(reactif(1,ic)+1),
291c    .     nomqy_c(reactif(2,ic)+1),nomqy_c(reactif(3,ic)+1),
292c    .     nomqy_c(reactif(4,ic)+1),nomqy_c(reactif(5,ic)+1)
293c       enddo
294
295
296c   init kedd
297c   ---------
298c   kedd stays constant with time and space
299c   => linked to pressure rather than altitude...
300 
301      kedd(:) = 5e2 ! valeur mise par defaut 
302               ! UNITE ? doit etre ok pour gptitan
303      do l=1,NLEV
304       zalt=rmil(l)-RA/1000.  ! z en km
305       if     ((zalt.ge.250.).and.(zalt.le.400.)) then
306         kedd(l) = 10.**(3.+(zalt-250.)/50.)
307! 1E3 at 250 km
308! 1E6 at 400 km
309       elseif ((zalt.gt.400.).and.(zalt.le.600.)) then
310         kedd(l) = 10.**(6.+1.3*(zalt-400.)/200.)
311! 2E7 at 600 km
312       elseif ((zalt.gt.600.).and.(zalt.le.900.)) then
313         kedd(l) = 10.**(7.3+0.7*(zalt-600.)/300.)
314! 1E8 above 900 km
315       elseif ( zalt.gt.900.                    ) then
316        kedd(l) = 1.e8
317       endif
318      enddo
319
320      ENDIF  ! premier appel
321
322c***********************************************************************
323c-----------------------------------------------------------------------
324
325c   calcul declin_c (en degres)
326c   ---------------------------
327
328      declin_c = declin_rad*180./RPI
329c      print*,'declinaison en degre=',declin_c
330       
331c***********************************************************************
332c***********************************************************************
333c
334c                BOUCLE SUR LES LATITUDES
335c
336      DO j=1,nlon
337     
338      if (j.eq.1) then
339         jm1=1
340      else
341         jm1=j-1
342      endif
343
344      if((j.eq.1).or.(klat(j).ne.klat(jm1))) then
345
346c***********************************************************************
347c***********************************************************************
348
349c-----------------------------------------------------------------------
350c
351c   Distance radiale (intercouches, en km)
352c   ----------------------------------------
353
354       do l=1,klev
355         rinter(l) = (RA+czlev(j,l))/1000.
356         rmil(l)   = (RA+czlay(j,l))/1000.
357c        print*,rinter(l)
358       enddo
359       rinter(klev+1)=(RA+czlev(j,klev+1))/1000.
360
361c au-dessus du GCM, dr regulier et rinter(NLEV)=1290+2575 km.
362       do l=klev+2,NLEV
363         rinter(l) = rinter(klev+1)
364     &          + (l-klev-1)*(3865.-rinter(klev+1))/(NLEV-klev-1)
365         rmil(l-1) = (rinter(l-1)+rinter(l))/2.
366       enddo
367       rmil(NLEV) = rinter(NLEV)+(rinter(NLEV)-rinter(NLEV-1))/2.
368
369c-----------------------------------------------------------------------
370c
371c   Temperature, pression (mbar), densite (cm-3)
372c   -------------------------------------------
373
374       DO l=1,klev
375c     temp_c (K):
376               temp_c(l)  = ctemp(j,l)
377c     press_c (mbar):
378               press_c(l) = cplay(j,l)/100.
379c     nb (cm-3):
380               nb(l) = 1.e-4*press_c(l) / (RKBOL*temp_c(l))
381       ENDDO
382c extension pour klev+1 a NLEV avec tcp.ver
383       ialt=1
384       do l=klev+1,NLEV
385           zalt=rmil(l)-RA/1000.
386           do i=ialt,130
387            if ((zalt.ge.r1d(i)).and.(zalt.lt.r1d(i+1))) then
388              ialt=i
389            endif
390           enddo
391           factalt = (zalt-r1d(ialt))/(r1d(ialt+1)-r1d(ialt))
392           press_c(l) = exp(  log(p1d(ialt))   * (1-factalt)
393     &                      + log(p1d(ialt+1)) * factalt    )
394           nb(l)      = exp(  log(ct1d(ialt))   * (1-factalt)
395     &                      + log(ct1d(ialt+1)) * factalt    )
396           temp_c(l)  = t1d(ialt) * (1-factalt) + t1d(ialt+1) * factalt
397       enddo
398               
399c-----------------------------------------------------------------------
400c
401c   passage krpd => krate
402c   ---------------------
403c initialisation krate pour dissociations
404
405      if ((declin_c*10+267).lt.14.) then
406          declinint = 0
407          dec       = 0
408      else
409       if ((declin_c*10+267).gt.520.) then
410          declinint = 14
411          dec       = 534
412       else
413          declinint = 1
414          dec       = 27
415          do while( (declin_c*10+267).ge.real(dec+20) )
416            dec       = dec+40
417            declinint = declinint+1
418          enddo
419       endif
420      endif
421      if ((declin_c.ge.-24.).and.(declin_c.le.24.)) then
422          factdec = ( declin_c - (dec-267)/10. ) / 4.
423      else
424          factdec = ( declin_c - (dec-267)/10. ) / 2.7
425      endif
426
427      do l=1,NLEV
428
429c INTERPOL EN ALT POUR k (krpd tous les deux km)
430        ialt    = int((rmil(l)-RA/1000.)/2.)+1
431        factalt = (rmil(l)-RA/1000.)/2.-(ialt-1)
432
433        do i=1,ND+1
434          krpddecm1 = krpd(declinint  ,i,ialt  ,klat(j)) * (1-factalt)
435     &              + krpd(declinint  ,i,ialt+1,klat(j)) * factalt
436          krpddec   = krpd(declinint+1,i,ialt  ,klat(j)) * (1-factalt)
437     &              + krpd(declinint+1,i,ialt+1,klat(j)) * factalt
438          krpddecp1 = krpd(declinint+2,i,ialt  ,klat(j)) * (1-factalt)
439     &              + krpd(declinint+2,i,ialt+1,klat(j)) * factalt
440
441                    ! ND+1 correspond a la dissociation de N2 par les GCR
442          if ( factdec.lt.0. ) then
443        krate(l,i) = krpddecm1 * abs(factdec)
444     &             + krpddec   * ( 1 + factdec)
445          endif
446          if ( factdec.gt.0. ) then
447        krate(l,i) = krpddecp1 * factdec
448     &             + krpddec   * ( 1 - factdec)
449          endif
450          if ( factdec.eq.0. ) krate(l,i) = krpddec
451        enddo       
452      enddo       
453
454c-----------------------------------------------------------------------
455c
456c   composition
457c   ------------
458
459       do ic=1,NC
460        do l=1,klev
461          cqy(l,ic)  = qy_c(j,l,ic)
462          cqy0(l,ic) = cqy(l,ic)
463        enddo
464       enddo
465
466c lecture du fichier compo_klat(j) (01 à 49) pour klev+1 a NLEV
467
468      WRITE(str2,'(i2.2)') klat(j)
469      fich = "comp_"//str2//".dat"
470      inquire (file=fich,exist=okfic)
471      if (okfic) then
472       open(11,file=fich,status='old')
473c premiere ligne=declin
474       read(11,'(A15)') ficdec
475       write(curdec,'(E15.5)') declin_c
476c si la declin est la meme: ce fichier a deja ete reecrit
477c on lit la colonne t-1 au lieu de la colonne t
478c (cas d une bande de latitude partagee par 2 procs)
479       do ic=1,NC
480        read(11,'(A10)') name
481        if (name.ne.nomqy_c(ic)) then
482          print*,"probleme lecture ",fich
483          print*,name,nomqy_c(ic)
484          stop
485        endif
486        if (ficdec.eq.curdec) then
487          do l=klev+1,NLEV
488            read(11,*) ficalt,cqy(l,ic),newq
489          enddo
490        else
491          do l=klev+1,NLEV
492            read(11,*) ficalt,oldq,cqy(l,ic)
493          enddo
494        endif
495       enddo
496       close(11)
497      else       ! le fichier n'est pas la
498       do ic=1,NC
499        do l=klev+1,NLEV
500          cqy(l,ic)=cqy(klev,ic)
501        enddo
502       enddo
503      endif
504      cqy0 = cqy
505
506c-----------------------------------------------------------------------
507c
508c   total haze area (um2/cm3)
509c   -------------------------
510
511       if (htoh2.eq.1) then
512        do l=1,klev
513! ATTENTION, INVERSION PAR RAPPORT A pg2.F !!!
514         surfhaze(l) = psurfhaze(j,klev+1-l)
515c        if (j.eq.25)
516c    .    print*,'psurfhaze en um2/cm3:',surfhaze(l)
517        enddo
518       endif
519
520c-----------------------------------------------------------------------
521c
522c   Appel de chimietitan
523c   --------------------
524       
525       call gptitan(rinter,temp_c,nb,
526     $              nomqy_c,cqy,
527     $              duree,(klat(j)-1),mass,md,
528     $              kedd,botCH4,krate,reactif,
529     $              nom_prod,nom_perte,prod,perte,
530     $              aerprod,utilaer,cmaer,cprodaer,ccsn,ccsh,
531     $              htoh2,surfhaze)
532       
533c   Tendances composition
534c   ---------------------
535     
536       do ic=1,NC
537        do l=1,klev
538          dqyc(j,l,ic) = (cqy(l,ic) - cqy0(l,ic))/dtchim  ! en /s
539        enddo
540       enddo
541
542c-----------------------------------------------------------------------
543c
544c   production aer
545c   --------------
546       
547       if (aerprod.eq.1) then
548
549       do ic=1,4
550        do l=1,klev
551          prodaer(j,l,ic) = cprodaer(l,ic)
552          maer(j,l,ic)    = cmaer(l,ic)
553          csn(j,l,ic)     = ccsn(l,ic)
554          csh(j,l,ic)     = ccsh(l,ic)
555        enddo
556       enddo
557
558       endif
559
560c-----------------------------------------------------------------------
561c
562c   sauvegarde compo sur NLEV
563c   -------------------------
564
565c dans fichier compo_klat(j) (01 à 49)
566       
567      open(11,file=fich,status='replace')
568c premiere ligne=declin
569      write(11,'(E15.5)') declin_c
570      do ic=1,NC
571       write(11,'(A10)') nomqy_c(ic)
572       do l=klev+1,NLEV
573        write(11,'(E15.5,1X,E15.5,1X,E15.5)') rmil(l)-RA/1000.,
574     .                                cqy0(l,ic),cqy(l,ic)
575       enddo
576      enddo
577      close(11)
578
579c***********************************************************************
580c***********************************************************************
581
582c              FIN: BOUCLE SUR LES LATITUDES
583
584      else      ! same latitude, we don't do calculations again
585        dqyc(j,:,:) = dqyc(jm1,:,:)
586        if (aerprod.eq.1) then
587          prodaer(j,:,:) = prodaer(jm1,:,:)
588          maer(j,:,:)    = maer(jm1,:,:)
589          csn(j,:,:)     = csn(jm1,:,:)
590          csh(j,:,:)     = csh(jm1,:,:)
591        endif
592      endif
593
594      ENDDO
595     
596c***********************************************************************
597c***********************************************************************
598
599
600      firstcal = .false.
601      RETURN
602      END
Note: See TracBrowser for help on using the repository browser.