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.
Changeset 6164 for branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/IDTRA/trcsms_idtra.F90 – NEMO

Ignore:
Timestamp:
2015-12-23T18:42:01+01:00 (8 years ago)
Author:
jpalmier
Message:

JPALM -- 23-12-2015 -- 1_ adapt CFC in MEDUSA branch - now Working properly 2_ add diagnostics to Ideal tracer

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/NERC/dev_r5518_NOC_MEDUSA_Stable/NEMOGCM/NEMO/TOP_SRC/IDTRA/trcsms_idtra.F90

    r6046 r6164  
    2525   PRIVATE 
    2626 
    27    PUBLIC   trc_sms_idtra       ! called in ??? 
    28  
     27   PUBLIC   trc_sms_idtra        ! called in ??? 
     28   PUBLIC   trc_sms_idtra_alloc  ! called in ??? 
     29   ! 
    2930   INTEGER , PUBLIC    ::   nyear_res      ! restoring time constant (year) 
    3031   INTEGER , PUBLIC    ::   numnatm 
    3132   REAL(wp), PUBLIC    ::   FDEC 
     33   ! 
     34   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qtr_idtra  ! flux at surface 
     35   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   qint_idtra ! cumulative flux  
     36   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:,:) ::   inv_idtra  ! vertic. inventory 
     37 
    3238   !                          ! coefficients for conversion 
    3339   REAL(wp) ::  WTEMP 
     
    7581 
    7682      !!---------------------------------------------------------------------- 
    77       IF(lwp) WRITE(numout,*) '   - JPALM - verif :' 
    78       IF(lwp) WRITE(numout,*) '   ~~~~~~~~~~~~~~~~~' 
    79       IF(lwp) WRITE(numout,*) '   - idtra decay factor : ', FDEC 
     83      IF (kt == nittrc000) THEN 
     84         IF(lwp) WRITE(numout,*) '   - JPALM - verif :' 
     85         IF(lwp) WRITE(numout,*) '   ~~~~~~~~~~~~~~~~~' 
     86         IF(lwp) WRITE(numout,*) '   - idtra decay factor : ', FDEC 
     87      ENDIF 
     88 
     89         ! 
     90      inv_idtra(:,:,:) = 0.0                                        !! init the inventory 
     91      DO jl = 1, jp_idtra 
     92         jn = jp_idtra0 + jl - 1 
     93 
     94         DO jj = 1, jpj 
     95            DO ji = 1, jpi 
     96         !! First, a crude version. will be much inproved later. 
     97             qtr_idtra(ji,jj,jl)  = (1. - trb(ji,jj,1,jn)) * tmask(ji,jj,1) *   &  
     98                                  fse3t(ji,jj,1) / rdt             !! Air-sea Flux 
     99           ENDDO 
     100         ENDDO 
     101         tra(:,:,1,jn)      = tra(:,:,1,jn) + ( qtr_idtra(:,:,jl) *  & 
     102                            tmask(:,:,1) / fse3t(:,:,1) ) 
     103         qint_idtra(:,:,jl) = qint_idtra(:,:,jl) +                   &            
     104                              qtr_idtra(:,:,jl) * rdt              !! Cumulative Air-sea Flux 
    80105 
    81106 
    82          ! 
    83 DO jn = jp_idtra0, jp_idtra1 
    84  
    85         ! DO jj = 1, jpj 
    86         !    DO ji = 1, jpi 
    87                ! Surface concentrarion fixed to 1 (ideal tracer concentration unit) 
    88                trn(:,:,1,jn) = 1. 
    89                trb(:,:,1,jn) = 1. 
    90                ! 
    91         !    ENDDO 
    92         ! ENDDO 
    93  
     107         DO jk =1,jpk 
     108            inv_idtra(:,:,jl) = inv_idtra(:,:,jl) +                  & 
     109                     (trn(:,:,jk,jn) * fse3t(:,:,jk) * tmask(:,:,jk))  !! vertical inventory 
     110         ENDDO 
    94111! 
    95112!DECAY of OUR IDEALIZED TRACER 
     
    101118               !  IF (trn(ji,jj,jk,jn) > 0.0) THEN 
    102119                    WTEMP = trn(ji,jj,jk,jn) * (1. - FDEC ) 
    103                     tra(ji,jj,jk,jn) = tra(ji,jj,jk,jn) - WTEMP/rdt 
     120                    tra(ji,jj,jk,jn) = (tra(ji,jj,jk,jn) - WTEMP/rdt ) * & 
     121                                     tmask(ji,jj,jk) 
    104122               !  ENDIF  
    105123              ENDDO  
     
    107125         ENDDO 
    108126 
    109 ENDDO 
     127      ENDDO 
    110128    !! jn loop 
    111129! 
    112130 
    113 !!!!!! No added diagnostics to save here for idealize tracers... 
    114 !!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    115 !! #if defined key_trc_diaadd 
    116 !!       ! Save diagnostics , just for TRI111 
    117 !! # if ! defined key_iomput 
    118 !!       trc2d(:,:,jp_idtra0_2d    ) = zpp_idtra(:,:) 
    119 !! # else 
    120 !! !           WRITE(NUMOUT,*) 'Iomput idtrasurf ' 
    121 !!       CALL iom_put( "TRISURF"  , zpp_idtra(:,:) ) 
    122 !! !      CALL iom_put( "TRISURF"  , xphem(:,:) ) 
    123 !! !           WRITE(NUMOUT,*) 'Iomputage ' 
    124 !!        CALL iom_put( "AGE"  , zage(:,:,:) ) 
    125 !! # endif 
    126 !! #endif 
    127 !! 
     131        ! 
     132      IF( lrst_trc ) THEN 
     133         IF(lwp) WRITE(numout,*) 
     134         IF(lwp) WRITE(numout,*) 'trc_sms_idtra : cumulated input function fields written in ocean restart file ',   & 
     135            &                    'at it= ', kt,' date= ', ndastp 
     136         IF(lwp) WRITE(numout,*) '~~~~' 
     137         DO jn = jp_idtra0, jp_idtra1 
     138            CALL iom_rstput( kt, nitrst, numrtw, 'qint_IDTRA', qint_idtra(:,:,jn) ) 
     139         END DO 
     140      ENDIF 
     141      ! 
     142      IF( lk_iomput ) THEN 
     143         CALL iom_put( "qtrIDTRA"  , qtr_idtra (:,:,1) ) 
     144         CALL iom_put( "qintIDTRA" , qint_idtra(:,:,1) ) 
     145         CALL iom_put( "invIDTRA" , inv_idtra(:,:,1) ) 
     146      ELSE 
     147         IF( ln_diatrc ) THEN 
     148            trc2d(:,:,jp_idtra0_2d    ) = qtr_idtra (:,:,1) 
     149            trc2d(:,:,jp_idtra0_2d + 1) = qint_idtra(:,:,1) 
     150            trc2d(:,:,jp_idtra0_2d + 2) = inv_idtra(:,:,1) 
     151         END IF 
     152      END IF 
     153      ! 
     154      IF( l_trdtrc ) THEN 
     155          DO jn = jp_idtra0, jp_idtra1 
     156            CALL trd_trc( tra(:,:,:,jn), jn, jptra_sms, kt )   ! save trends 
     157          END DO 
     158      END IF 
     159      ! 
     160      IF( nn_timing == 1 )  CALL timing_stop('trc_sms_idtra') 
     161      ! 
     162   END SUBROUTINE trc_sms_idtra 
    128163 
    129 !!      IF( l_trdtrc ) THEN 
    130 !!          DO jn = jp_idtra0, jp_idtra1 
    131 !!            zidtradtra(:,:,:) = tra(:,:,:,jn) 
    132 !!            CALL trd_mod_trc( zidtradtra, jn, jptrc_trd_sms, kt )   ! save trends 
    133 !!          END DO 
    134 !!      END IF 
     164   INTEGER FUNCTION trc_sms_idtra_alloc() 
     165      !!---------------------------------------------------------------------- 
     166      !!                     ***  ROUTINE trc_sms_idtra_alloc  *** 
     167      !!---------------------------------------------------------------------- 
     168      ALLOCATE( qtr_idtra (jpi,jpj,jp_idtra) ,     & 
     169         &      inv_idtra(jpi,jpj,jp_idtra)  ,     & 
     170         &      qint_idtra(jpi,jpj,jp_idtra) , STAT=trc_sms_idtra_alloc ) 
     171         ! 
     172      IF( trc_sms_idtra_alloc /= 0 ) CALL ctl_warn('trc_sms_idtra_alloc : failed to allocate arrays.') 
     173      ! 
     174   END FUNCTION trc_sms_idtra_alloc 
    135175 
    136    END SUBROUTINE trc_sms_idtra 
    137176#else 
    138177   !!---------------------------------------------------------------------- 
Note: See TracChangeset for help on using the changeset viewer.