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.
bulk.F90 in trunk/NEMO/OPA_SRC/SBC – NEMO

source: trunk/NEMO/OPA_SRC/SBC/bulk.F90 @ 247

Last change on this file since 247 was 247, checked in by opalod, 19 years ago

CL : Add CVS Header and CeCILL licence information

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.3 KB
Line 
1MODULE bulk
2   !!======================================================================
3   !!                           ***  bulk  ***
4   !!======================================================================
5#if defined key_flx_bulk_monthly || defined key_flx_bulk_daily
6   !!----------------------------------------------------------------------
7   !!   'key_flx_bulk_monthly'                        monthly bulk formulea
8   !!   'key_flx_bulk_daily'                          daily bulk formulea
9   !!----------------------------------------------------------------------
10   !!   bulk          : computation of fluxes using bulk formulation
11   !!----------------------------------------------------------------------
12   !! * Modules used   
13   USE oce             ! ocean dynamics and tracers
14   USE dom_oce         ! ocean space and time domain
15   USE ice_oce         ! bulk variable 
16   USE ocfzpt          ! ocean freezing point
17   USE flxblk          ! bulk formulae
18   USE blk_oce         ! bulk variable
19   USE flx_oce
20   USE taumod
21   USE phycst          ! physical constants
22   USE in_out_manager  ! I/O manager
23
24   IMPLICIT NONE
25   PRIVATE
26
27   !! * Routine accessibility
28   PUBLIC blk        ! called by flx.F90   
29   !!----------------------------------------------------------------------
30   !!   OPA 9.0 , LOCEAN-IPSL (2005)
31   !! $Header$
32   !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt
33   !!----------------------------------------------------------------------
34CONTAINS
35
36   SUBROUTINE blk( kt )
37      !!---------------------------------------------------------------------
38      !!                    ***  ROUTINE blk  ***
39      !!       
40      !! ** Purpose :   provide the heat fluxes on ice and ocean
41      !!                using bulk formulation
42      !!
43      !! History :
44      !!   9.0  !  03-11  (C. Ethe and G. Madec)  F90: Free form and MODULE
45      !!----------------------------------------------------------------------
46      !! * arguments
47      INTEGER, INTENT( in  ) ::   kt   ! ocean time step
48
49      !! * Local declarations   
50      REAL(wp), DIMENSION(jpi,jpj) ::   &
51         zsst , zsss
52# if ! defined key_ice_lim
53      INTEGER  ::   ji, jj         ! dummy loop indices 
54      REAL(wp) ::   ztgel, zicopa
55# endif
56      !!---------------------------------------------------------------------
57
58     ! Initialisation
59     IF( kt == nit000) THEN
60      ! computation of rdtbs2
61        IF( nacc == 1 ) THEN
62           rdtbs2 = nfbulk * rdtmin * 0.5
63        ELSE
64           rdtbs2 = nfbulk * rdt * 0.5
65        ENDIF
66        IF ( .NOT.ln_rstart ) THEN
67           gsst(:,:) =  ( nfbulk - 1 ) * ( tn(:,:,1) + rt0 )
68           gsss(:,:) =  ( nfbulk - 1 ) *   sn(:,:,1)
69        ENDIF
70     ENDIF
71
72# if ! defined key_ice_lim
73      ! opa model ice freeze()     
74      DO jj = 1, jpj
75         DO ji = 1, jpi
76            ztgel  = fzptn(ji,jj)
77            zicopa = tmask(ji,jj,1)
78            IF( tn(ji,jj,1) >= ztgel ) zicopa = 0.
79            freeze(ji,jj) = zicopa
80         END DO
81      END DO
82# endif
83
84      gsst(:,:) = gsst(:,:) + tn(:,:,1) + rt0 
85      gsss(:,:) = gsss(:,:) + sn(:,:,1)
86
87      !  Computation of the fluxes       
88      IF( MOD( kt - 1 , nfbulk ) == 0 ) THEN
89
90!i       zsst(:,:) = gsst(:,:) / REAL( nfbulk )
91         zsst(:,:) = gsst(:,:) / REAL( nfbulk ) * tmask(:,:,1)
92         zsss(:,:) = gsss(:,:) / REAL( nfbulk )
93         CALL flx_blk( zsst )   
94     
95         gsst(:,:) = 0.   
96         gsss(:,:) = 0. 
97
98# if ! defined key_ice_lim
99         IF(l_ctl) THEN         ! print mean trends (used for debugging)
100            WRITE(numout,*) ' Forcings '
101            WRITE(numout,*) ' qsr_oce  : ', SUM( qsr_oce (1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) )
102            WRITE(numout,*) ' qsr_ice  : ', SUM( qsr_ice (1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) )
103            WRITE(numout,*) ' qnsr_oce : ', SUM( qnsr_oce(1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) )
104            WRITE(numout,*) ' qnsr_ice : ', SUM( qnsr_ice(1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) )
105            WRITE(numout,*) ' evap     : ', SUM( evap    (1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) )
106            WRITE(numout,*) ' precip   : ', SUM( tprecip (1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) ) / rday
107            WRITE(numout,*) ' Snow     : ', SUM( sprecip (1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) ) / rday
108            WRITE(numout,*) ' u-stress : ', SUM( taux    (1:nictl+1,1:njctl+1) * umask(1:nictl+1,1:njctl+1,1) )
109            WRITE(numout,*) ' v-stress : ', SUM( tauy    (1:nictl+1,1:njctl+1) * vmask(1:nictl+1,1:njctl+1,1) )
110            WRITE(numout,*) ' sst      : ', SUM( zsst    (1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) )
111            WRITE(numout,*) ' sss      : ', SUM( zsss    (1:nictl+1,1:njctl+1) * tmask(1:nictl+1,1:njctl+1,1) )
112            WRITE(numout,*)
113         ENDIF
114# endif   
115      ENDIF
116 
117   END SUBROUTINE blk
118
119#else
120   !!----------------------------------------------------------------------
121   !!   Dummy module :                                     NO bulk formulea
122   !!----------------------------------------------------------------------
123CONTAINS
124   SUBROUTINE blk( kt )          ! Dummy routine
125      WRITE(*,*) 'blk: You should not see this print! error? ', kt
126   END SUBROUTINE blk
127#endif
128 
129   !!======================================================================
130END MODULE bulk
Note: See TracBrowser for help on using the repository browser.