123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172 |
- MODULE trcwri
- !!======================================================================
- !! *** MODULE trcwri ***
- !! TOP : Output of passive tracers
- !!======================================================================
- !! History : 1.0 ! 2009-05 (C. Ethe) Original code
- !!----------------------------------------------------------------------
- #if defined key_top && defined key_iomput
- !!----------------------------------------------------------------------
- !! 'key_top' TOP models
- !!----------------------------------------------------------------------
- !! trc_wri_trc : outputs of concentration fields
- !!----------------------------------------------------------------------
- USE dom_oce ! ocean space and time domain variables
- USE oce_trc ! shared variables between ocean and passive tracers
- USE trc ! passive tracers common variables
- USE iom ! I/O manager
- USE ioipsl
- USE dianam ! Output file name
- USE trcwri_pisces
- USE trcwri_cfc
- USE trcwri_c14b
- USE trcwri_age
- USE trcwri_my_trc
- IMPLICIT NONE
- PRIVATE
- PUBLIC trc_wri
- PUBLIC trc_wri_state
- !! * Substitutions
- # include "top_substitute.h90"
- CONTAINS
- SUBROUTINE trc_wri( kt )
- !!---------------------------------------------------------------------
- !! *** ROUTINE trc_wri ***
- !!
- !! ** Purpose : output passive tracers fields and dynamical trends
- !!---------------------------------------------------------------------
- INTEGER, INTENT( in ) :: kt
- !
- INTEGER :: jn
- CHARACTER (len=20) :: cltra
- CHARACTER (len=40) :: clhstnam
- INTEGER :: inum = 11 ! temporary logical unit
- !!---------------------------------------------------------------------
- !
- IF( nn_timing == 1 ) CALL timing_start('trc_wri')
- !
- IF( lk_offline .AND. kt == nittrc000 .AND. lwp ) THEN ! WRITE root name in date.file for use by postpro
- CALL dia_nam( clhstnam, nn_writetrc,' ' )
- CALL ctl_opn( inum, 'date.file', 'REPLACE', 'FORMATTED', 'SEQUENTIAL', -1, numout, lwp, narea )
- WRITE(inum,*) clhstnam
- CLOSE(inum)
- ENDIF
- ! write the tracer concentrations in the file
- ! ---------------------------------------
- IF( lk_offline .AND. lk_vvl ) THEN
- !
- CALL iom_put( "e3t" , fse3t_n(:,:,:) )
- CALL iom_put( "e3u" , fse3u_n(:,:,:) )
- CALL iom_put( "e3v" , fse3v_n(:,:,:) )
- CALL iom_put( "e3w" , fse3w_n(:,:,:) )
- !
- CALL iom_put( "ssh" , sshn ) ! sea surface height
- !
- ENDIF
-
- IF( lk_pisces ) CALL trc_wri_pisces ! PISCES
- IF( lk_my_trc ) CALL trc_wri_my_trc ! MY_TRC tracers
- IF( lk_cfc ) CALL trc_wri_cfc ! surface fluxes of CFC
- IF( lk_c14b ) CALL trc_wri_c14b ! surface fluxes of C14
- IF( lk_age ) CALL trc_wri_age ! AGE tracer
- !
- IF( nn_timing == 1 ) CALL timing_stop('trc_wri')
- !
- END SUBROUTINE trc_wri
- SUBROUTINE trc_wri_state( cdfile_name, kt )
- !!---------------------------------------------------------------------
- !! *** ROUTINE dia_wri_state ***
- !!
- !! ** Purpose : create a NetCDF file named cdfile_name which contains
- !! the instantaneous ocean state and forcing fields.
- !! Used to find errors in the initial state or save the last
- !! ocean state in case of abnormal end of a simulation
- !!
- !! ** Method : NetCDF files using ioipsl
- !! File 'output.init.nc' is created if ninist = 1 (namelist)
- !! File 'output.abort.trc.nc' is created in case of abnormal job end
- !!----------------------------------------------------------------------
- CHARACTER (len=* ), INTENT( in ) :: cdfile_name ! name of the file created
- INTEGER , INTENT( in ) :: kt ! ocean time-step index
- !!
- CHARACTER (len=32) :: clname
- CHARACTER (len=40) :: clop
- CHARACTER (len=20) :: cltra, cltrau
- CHARACTER (len=80) :: cltral
- INTEGER :: id_i , nz_i, nh_i, jn
- INTEGER, DIMENSION(1) :: idex ! local workspace
- REAL(wp) :: zsto, zout, zmax, zjulian, zdt
- !!----------------------------------------------------------------------
- !
- ! -----------------
- ! Define name, frequency of output and means
- clname = cdfile_name
- zdt = rdt
- zsto = rdt
- clop = "inst(x)" ! no use of the mask value (require less cpu time)
- zout = rdt
- IF(lwp) WRITE(numout,*)
- IF(lwp) WRITE(numout,*) 'trc_wri_state : single instantaneous ocean state'
- IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~ and forcing fields file created '
- IF(lwp) WRITE(numout,*) ' and named :', clname, '.nc'
- ! Compute julian date from starting date of the run
- CALL ymds2ju( nyear, nmonth, nday, rdt, zjulian )
- zjulian = zjulian - adatrj ! set calendar origin to the beginning of the experiment
- CALL histbeg( clname, jpi, glamt, jpj, gphit, &
- 1, jpi, 1, jpj, nit000-1, zjulian, zdt, nh_i, id_i, domain_id=nidom, snc4chunks=snc4set ) ! Horizontal grid : glamt and gphit
- CALL histvert( id_i, "deptht", "Vertical T levels", "m", jpk, gdept_1d, nz_i, "down") ! Vertical grid : gdept
- ! Declare all the output fields as NETCDF variables
- DO jn = 1, jptra
- cltra = TRIM( ctrcnm(jn) ) ! short title for tracer
- cltral = TRIM( ctrcln(jn) ) ! long title for tracer
- cltrau = TRIM( ctrcun(jn) ) ! UNIT for tracer
- CALL histdef( id_i, cltra, cltral, cltrau, jpi, jpj, nh_i, &
- & jpk, 1, jpk, nz_i, 32, clop, zsto, zout )
- END DO
- CALL histend( id_i, snc4chunks=snc4set )
- DO jn = 1, jptra
- cltra = TRIM( ctrcnm(jn) ) ! short title for tracer
- CALL histwrite( id_i, cltra, kt, trn(:,:,:,jn), jpi*jpj*jpk, idex )
- END DO
- CALL histclo( id_i )
- END SUBROUTINE trc_wri_state
- #else
- !!----------------------------------------------------------------------
- !! Dummy module : No passive tracer
- !!----------------------------------------------------------------------
- PUBLIC trc_wri
- CONTAINS
- SUBROUTINE trc_wri( kt ) ! Empty routine
- INTEGER, INTENT(in) :: kt
- END SUBROUTINE trc_wri
- SUBROUTINE trc_wri_state( cd_name, kt ) ! Empty routine
- CHARACTER (len=* ), INTENT( in ) :: cd_name ! name of the file created
- INTEGER, INTENT(in) :: kt
- END SUBROUTINE trc_wri_state
- #endif
- !!----------------------------------------------------------------------
- !! NEMO/TOP 3.3 , NEMO Consortium (2010)
- !! $Id: trcwri.F90 8353 2017-07-19 14:41:00Z lovato $
- !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
- !!======================================================================
- END MODULE trcwri
|