123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541 |
- MODULE limrst
- !!======================================================================
- !! *** MODULE limrst ***
- !! Ice restart : write the ice restart file
- !!======================================================================
- !! History: - ! 2005-04 (M. Vancoppenolle) Original code
- !! 3.0 ! 2008-03 (C. Ethe) restart files in using IOM interface
- !! 4.0 ! 2011-02 (G. Madec) dynamical allocation
- !!----------------------------------------------------------------------
- #if defined key_lim3
- !!----------------------------------------------------------------------
- !! 'key_lim3' : LIM sea-ice model
- !!----------------------------------------------------------------------
- !! lim_rst_opn : open ice restart file
- !! lim_rst_write : write of the restart file
- !! lim_rst_read : read the restart file
- !!----------------------------------------------------------------------
- USE ice ! sea-ice variables
- USE oce , ONLY : snwice_mass, snwice_mass_b
- USE dom_oce ! ocean domain
- USE sbc_oce ! Surface boundary condition: ocean fields
- USE sbc_ice ! Surface boundary condition: ice fields
- USE in_out_manager ! I/O manager
- USE iom ! I/O library
- USE lib_mpp ! MPP library
- USE wrk_nemo ! work arrays
- USE lib_fortran ! Fortran utilities (allows no signed zero when 'key_nosignedzero' defined)
- USE limctl
- IMPLICIT NONE
- PRIVATE
- PUBLIC lim_rst_opn ! routine called by icestep.F90
- PUBLIC lim_rst_write ! routine called by icestep.F90
- PUBLIC lim_rst_read ! routine called by sbc_lim_init
- LOGICAL, PUBLIC :: lrst_ice !: logical to control the ice restart write
- INTEGER, PUBLIC :: numrir, numriw !: logical unit for ice restart (read and write)
- !!----------------------------------------------------------------------
- !! NEMO/LIM3 4.0 , UCL - NEMO Consortium (2011)
- !! $Id: limrst.F90 4990 2014-12-15 16:42:49Z timgraham $
- !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)
- !!----------------------------------------------------------------------
- CONTAINS
- SUBROUTINE lim_rst_opn( kt )
- !!----------------------------------------------------------------------
- !! *** lim_rst_opn ***
- !!
- !! ** purpose : output of sea-ice variable in a netcdf file
- !!----------------------------------------------------------------------
- INTEGER, INTENT(in) :: kt ! number of iteration
- !
- CHARACTER(LEN=20) :: clkt ! ocean time-step define as a character
- CHARACTER(LEN=50) :: clname ! ice output restart file name
- CHARACTER(len=256) :: clpath ! full path to ice output restart file
- !!----------------------------------------------------------------------
- !
- IF( kt == nit000 ) lrst_ice = .FALSE. ! default definition
- ! in order to get better performances with NetCDF format, we open and define the ice restart file
- ! one ice time step before writing the data (-> at nitrst - 2*nn_fsbc + 1), except if we write ice
- ! restart files every ice time step or if an ice restart file was writen at nitend - 2*nn_fsbc + 1
- IF( kt == nitrst - 2*nn_fsbc + 1 .OR. nstock == nn_fsbc &
- & .OR. ( kt == nitend - nn_fsbc + 1 .AND. .NOT. lrst_ice ) ) THEN
- IF( nitrst <= nitend .AND. nitrst > 0 ) THEN
- ! beware of the format used to write kt (default is i8.8, that should be large enough...)
- IF( nitrst > 99999999 ) THEN ; WRITE(clkt, * ) nitrst
- ELSE ; WRITE(clkt, '(i8.8)') nitrst
- ENDIF
- ! create the file
- clname = TRIM(cexper)//"_"//TRIM(ADJUSTL(clkt))//"_"//TRIM(cn_icerst_out)
- clpath = TRIM(cn_icerst_outdir)
- IF( clpath(LEN_TRIM(clpath):) /= '/' ) clpath = TRIM(clpath)//'/'
- IF(lwp) THEN
- WRITE(numout,*)
- SELECT CASE ( jprstlib )
- CASE ( jprstdimg )
- WRITE(numout,*) ' open ice restart binary file: ',TRIM(clpath)//clname
- CASE DEFAULT
- WRITE(numout,*) ' open ice restart NetCDF file: ',TRIM(clpath)//clname
- END SELECT
- IF( kt == nitrst - 2*nn_fsbc + 1 ) THEN
- WRITE(numout,*) ' kt = nitrst - 2*nn_fsbc + 1 = ', kt,' date= ', ndastp
- ELSE ; WRITE(numout,*) ' kt = ' , kt,' date= ', ndastp
- ENDIF
- ENDIF
- !
- CALL iom_open( TRIM(clpath)//TRIM(clname), numriw, ldwrt = .TRUE., kiolib = jprstlib )
- lrst_ice = .TRUE.
- ENDIF
- ENDIF
- !
- IF( ln_icectl ) CALL lim_prt( kt, iiceprt, jiceprt, 1, ' - Beginning the time step - ' ) ! control print
- END SUBROUTINE lim_rst_opn
- SUBROUTINE lim_rst_write( kt )
- !!----------------------------------------------------------------------
- !! *** lim_rst_write ***
- !!
- !! ** purpose : output of sea-ice variable in a netcdf file
- !!----------------------------------------------------------------------
- INTEGER, INTENT(in) :: kt ! number of iteration
- !!
- INTEGER :: ji, jj, jk ,jl ! dummy loop indices
- INTEGER :: iter
- CHARACTER(len=15) :: znam
- CHARACTER(len=2) :: zchar, zchar1
- REAL(wp), POINTER, DIMENSION(:,:) :: z2d
- !!----------------------------------------------------------------------
- CALL wrk_alloc( jpi, jpj, z2d )
- iter = kt + nn_fsbc - 1 ! ice restarts are written at kt == nitrst - nn_fsbc + 1
- IF( iter == nitrst ) THEN
- IF(lwp) WRITE(numout,*)
- IF(lwp) WRITE(numout,*) 'lim_rst_write : write ice restart file kt =', kt
- IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~~~'
- ENDIF
- ! Write in numriw (if iter == nitrst)
- ! ------------------
- ! ! calendar control
- CALL iom_rstput( iter, nitrst, numriw, 'nn_fsbc', REAL( nn_fsbc, wp ) ) ! time-step
- CALL iom_rstput( iter, nitrst, numriw, 'kt_ice' , REAL( iter , wp ) ) ! date
- ! Prognostic variables
- DO jl = 1, jpl
- WRITE(zchar,'(I2)') jl
- znam = 'v_i'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = v_i(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'v_s'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = v_s(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'smv_i'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = smv_i(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'oa_i'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = oa_i(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'a_i'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = a_i(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 't_su'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = t_su(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'tempt_sl1'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = e_s(:,:,1,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- DO jk = 1, nlay_i
- WRITE(zchar1,'(I2)') jk
- znam = 'tempt'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = e_i(:,:,jk,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- END DO
- END DO
- CALL iom_rstput( iter, nitrst, numriw, 'u_ice' , u_ice )
- CALL iom_rstput( iter, nitrst, numriw, 'v_ice' , v_ice )
- CALL iom_rstput( iter, nitrst, numriw, 'stress1_i' , stress1_i )
- CALL iom_rstput( iter, nitrst, numriw, 'stress2_i' , stress2_i )
- CALL iom_rstput( iter, nitrst, numriw, 'stress12_i' , stress12_i )
- CALL iom_rstput( iter, nitrst, numriw, 'snwice_mass' , snwice_mass )
- CALL iom_rstput( iter, nitrst, numriw, 'snwice_mass_b', snwice_mass_b )
- DO jl = 1, jpl
- WRITE(zchar,'(I2)') jl
- znam = 'sxice'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxice(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syice'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syice(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxxice'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxxice(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syyice'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syyice(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxyice'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxyice(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxsn'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxsn(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sysn'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sysn(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxxsn'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxxsn(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syysn'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syysn(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxysn'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxysn(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxa'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxa(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sya'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sya(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxxa'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxxa(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syya'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syya(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxya'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxya(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxc0'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxc0(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syc0'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syc0(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxxc0'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxxc0(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syyc0'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syyc0(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxyc0'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxyc0(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxsal'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxsal(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sysal'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sysal(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxxsal'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxxsal(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syysal'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syysal(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxysal'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxysal(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxage'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxage(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syage'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syage(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxxage'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxxage(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syyage'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syyage(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxyage'//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxyage(:,:,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- END DO
- CALL iom_rstput( iter, nitrst, numriw, 'sxopw ' , sxopw )
- CALL iom_rstput( iter, nitrst, numriw, 'syopw ' , syopw )
- CALL iom_rstput( iter, nitrst, numriw, 'sxxopw' , sxxopw )
- CALL iom_rstput( iter, nitrst, numriw, 'syyopw' , syyopw )
- CALL iom_rstput( iter, nitrst, numriw, 'sxyopw' , sxyopw )
- DO jl = 1, jpl
- WRITE(zchar,'(I2)') jl
- DO jk = 1, nlay_i
- WRITE(zchar1,'(I2)') jk
- znam = 'sxe'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxe(:,:,jk,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sye'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sye(:,:,jk,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxxe'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxxe(:,:,jk,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'syye'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = syye(:,:,jk,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- znam = 'sxye'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- z2d(:,:) = sxye(:,:,jk,jl)
- CALL iom_rstput( iter, nitrst, numriw, znam , z2d )
- END DO
- END DO
- IF( iter == nitrst ) THEN
- CALL iom_close( numriw ) ! close the restart file
- lrst_ice = .FALSE.
- ENDIF
- !
- CALL wrk_dealloc( jpi, jpj, z2d )
- !
- END SUBROUTINE lim_rst_write
- SUBROUTINE lim_rst_read
- !!----------------------------------------------------------------------
- !! *** lim_rst_read ***
- !!
- !! ** purpose : read of sea-ice variable restart in a netcdf file
- !!----------------------------------------------------------------------
- INTEGER :: ji, jj, jk, jl
- REAL(wp) :: zfice, ziter
- REAL(wp), POINTER, DIMENSION(:,:) :: z2d
- CHARACTER(len=15) :: znam
- CHARACTER(len=2) :: zchar, zchar1
- INTEGER :: jlibalt = jprstlib
- LOGICAL :: llok
- !!----------------------------------------------------------------------
- CALL wrk_alloc( jpi, jpj, z2d )
- IF(lwp) THEN
- WRITE(numout,*)
- WRITE(numout,*) 'lim_rst_read : read ice NetCDF restart file'
- WRITE(numout,*) '~~~~~~~~~~~~~'
- ENDIF
- IF ( jprstlib == jprstdimg ) THEN
- ! eventually read netcdf file (monobloc) for restarting on different number of processors
- ! if {cn_icerst_in}.nc exists, then set jlibalt to jpnf90
- INQUIRE( FILE = TRIM(cn_icerst_indir)//'/'//TRIM(cn_icerst_in)//'.nc', EXIST = llok )
- IF ( llok ) THEN ; jlibalt = jpnf90 ; ELSE ; jlibalt = jprstlib ; ENDIF
- ENDIF
- CALL iom_open ( TRIM(cn_icerst_indir)//'/'//cn_icerst_in, numrir, kiolib = jprstlib )
- CALL iom_get( numrir, 'nn_fsbc', zfice )
- CALL iom_get( numrir, 'kt_ice' , ziter )
- IF(lwp) WRITE(numout,*) ' read ice restart file at time step : ', ziter
- IF(lwp) WRITE(numout,*) ' in any case we force it to nit000 - 1 : ', nit000 - 1
- !Control of date
- IF( ( nit000 - NINT(ziter) ) /= 1 .AND. ABS( nrstdt ) == 1 ) &
- & CALL ctl_stop( 'lim_rst_read ===>>>> : problem with nit000 in ice restart', &
- & ' verify the file or rerun with the value 0 for the', &
- & ' control of time parameter nrstdt' )
- IF( NINT(zfice) /= nn_fsbc .AND. ABS( nrstdt ) == 1 ) &
- & CALL ctl_stop( 'lim_rst_read ===>>>> : problem with nn_fsbc in ice restart', &
- & ' verify the file or rerun with the value 0 for the', &
- & ' control of time parameter nrstdt' )
- ! Prognostic variables
- DO jl = 1, jpl
- WRITE(zchar,'(I2)') jl
- znam = 'v_i'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- v_i(:,:,jl) = z2d(:,:)
- znam = 'v_s'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- v_s(:,:,jl) = z2d(:,:)
- znam = 'smv_i'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- smv_i(:,:,jl) = z2d(:,:)
- znam = 'oa_i'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- oa_i(:,:,jl) = z2d(:,:)
- znam = 'a_i'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- a_i(:,:,jl) = z2d(:,:)
- znam = 't_su'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- t_su(:,:,jl) = z2d(:,:)
- znam = 'tempt_sl1'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- e_s(:,:,1,jl) = z2d(:,:)
- DO jk = 1, nlay_i
- WRITE(zchar1,'(I2)') jk
- znam = 'tempt'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- e_i(:,:,jk,jl) = z2d(:,:)
- END DO
- END DO
- CALL iom_get( numrir, jpdom_autoglo, 'u_ice' , u_ice )
- CALL iom_get( numrir, jpdom_autoglo, 'v_ice' , v_ice )
- CALL iom_get( numrir, jpdom_autoglo, 'stress1_i' , stress1_i )
- CALL iom_get( numrir, jpdom_autoglo, 'stress2_i' , stress2_i )
- CALL iom_get( numrir, jpdom_autoglo, 'stress12_i', stress12_i )
- CALL iom_get( numrir, jpdom_autoglo, 'snwice_mass' , snwice_mass )
- CALL iom_get( numrir, jpdom_autoglo, 'snwice_mass_b', snwice_mass_b )
- DO jl = 1, jpl
- WRITE(zchar,'(I2)') jl
- znam = 'sxice'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxice(:,:,jl) = z2d(:,:)
- znam = 'syice'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syice(:,:,jl) = z2d(:,:)
- znam = 'sxxice'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxxice(:,:,jl) = z2d(:,:)
- znam = 'syyice'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syyice(:,:,jl) = z2d(:,:)
- znam = 'sxyice'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxyice(:,:,jl) = z2d(:,:)
- znam = 'sxsn'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxsn(:,:,jl) = z2d(:,:)
- znam = 'sysn'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sysn(:,:,jl) = z2d(:,:)
- znam = 'sxxsn'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxxsn(:,:,jl) = z2d(:,:)
- znam = 'syysn'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syysn(:,:,jl) = z2d(:,:)
- znam = 'sxysn'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxysn(:,:,jl) = z2d(:,:)
- znam = 'sxa'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxa(:,:,jl) = z2d(:,:)
- znam = 'sya'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sya(:,:,jl) = z2d(:,:)
- znam = 'sxxa'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxxa(:,:,jl) = z2d(:,:)
- znam = 'syya'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syya(:,:,jl) = z2d(:,:)
- znam = 'sxya'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxya(:,:,jl) = z2d(:,:)
- znam = 'sxc0'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxc0(:,:,jl) = z2d(:,:)
- znam = 'syc0'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syc0(:,:,jl) = z2d(:,:)
- znam = 'sxxc0'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxxc0(:,:,jl) = z2d(:,:)
- znam = 'syyc0'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syyc0(:,:,jl) = z2d(:,:)
- znam = 'sxyc0'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxyc0(:,:,jl) = z2d(:,:)
- znam = 'sxsal'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxsal(:,:,jl) = z2d(:,:)
- znam = 'sysal'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sysal(:,:,jl) = z2d(:,:)
- znam = 'sxxsal'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxxsal(:,:,jl) = z2d(:,:)
- znam = 'syysal'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syysal(:,:,jl) = z2d(:,:)
- znam = 'sxysal'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxysal(:,:,jl) = z2d(:,:)
- znam = 'sxage'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxage(:,:,jl) = z2d(:,:)
- znam = 'syage'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syage(:,:,jl) = z2d(:,:)
- znam = 'sxxage'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxxage(:,:,jl) = z2d(:,:)
- znam = 'syyage'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syyage(:,:,jl) = z2d(:,:)
- znam = 'sxyage'//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxyage(:,:,jl)= z2d(:,:)
- END DO
- CALL iom_get( numrir, jpdom_autoglo, 'sxopw ' , sxopw )
- CALL iom_get( numrir, jpdom_autoglo, 'syopw ' , syopw )
- CALL iom_get( numrir, jpdom_autoglo, 'sxxopw' , sxxopw )
- CALL iom_get( numrir, jpdom_autoglo, 'syyopw' , syyopw )
- CALL iom_get( numrir, jpdom_autoglo, 'sxyopw' , sxyopw )
- DO jl = 1, jpl
- WRITE(zchar,'(I2)') jl
- DO jk = 1, nlay_i
- WRITE(zchar1,'(I2)') jk
- znam = 'sxe'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxe(:,:,jk,jl) = z2d(:,:)
- znam = 'sye'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sye(:,:,jk,jl) = z2d(:,:)
- znam = 'sxxe'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxxe(:,:,jk,jl) = z2d(:,:)
- znam = 'syye'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- syye(:,:,jk,jl) = z2d(:,:)
- znam = 'sxye'//'_il'//TRIM(ADJUSTL(zchar1))//'_htc'//TRIM(ADJUSTL(zchar))
- CALL iom_get( numrir, jpdom_autoglo, znam , z2d )
- sxye(:,:,jk,jl) = z2d(:,:)
- END DO
- END DO
- !
- ! clem: I do not understand why the following IF is needed
- ! I suspect something inconsistent in the main code with option nn_icesal=1
- IF( nn_icesal == 1 ) THEN
- DO jl = 1, jpl
- sm_i(:,:,jl) = rn_icesal
- DO jk = 1, nlay_i
- s_i(:,:,jk,jl) = rn_icesal
- END DO
- END DO
- ENDIF
- !
- !CALL iom_close( numrir ) !clem: closed in sbcice_lim.F90
- !
- CALL wrk_dealloc( jpi, jpj, z2d )
- !
- END SUBROUTINE lim_rst_read
- #else
- !!----------------------------------------------------------------------
- !! Default option : Empty module NO LIM sea-ice model
- !!----------------------------------------------------------------------
- CONTAINS
- SUBROUTINE lim_rst_read ! Empty routine
- END SUBROUTINE lim_rst_read
- SUBROUTINE lim_rst_write ! Empty routine
- END SUBROUTINE lim_rst_write
- #endif
- !!======================================================================
- END MODULE limrst
|