LCOV - code coverage report
Current view: top level - configuration/driver - icedrv_restart.F90 (source / functions) Hit Total Coverage
Test: 200627-180253:73ff1aa4b4:3:base,travis,quick Lines: 306 330 92.73 %
Date: 2020-06-27 12:24:05 Functions: 25 25 100.00 %

          Line data    Source code
       1             : !=======================================================================
       2             : 
       3             : ! Read and write ice model restart files
       4             : !
       5             : ! authors Elizabeth C. Hunke, LANL
       6             : 
       7             :       module icedrv_restart
       8             : 
       9             :       use icedrv_kinds
      10             :       use icedrv_constants, only: nu_diag, nu_restart, nu_dump
      11             :       use icedrv_constants, only: c0, c1, p5
      12             :       use icedrv_restart_shared, only: restart, restart_dir, restart_file, lenstr
      13             :       use icepack_intfc, only: icepack_warnings_flush, icepack_warnings_aborted
      14             :       use icepack_intfc, only: icepack_query_tracer_flags, icepack_query_tracer_indices
      15             :       use icepack_intfc, only: icepack_query_parameters
      16             :       use icedrv_system, only: icedrv_system_abort
      17             : 
      18             :       implicit none
      19             :       private :: write_restart_pond_topo, read_restart_pond_topo, &
      20             :           write_restart_age,       read_restart_age, &
      21             :           write_restart_FY,        read_restart_FY, &  
      22             :           write_restart_lvl,       read_restart_lvl, & 
      23             :           write_restart_pond_cesm, read_restart_pond_cesm, & 
      24             :           write_restart_pond_lvl,  read_restart_pond_lvl, &
      25             :           write_restart_fsd,       read_restart_fsd, &
      26             :           write_restart_iso,       read_restart_iso, &
      27             :           write_restart_aero,      read_restart_aero
      28             : 
      29             :       public :: dumpfile, restartfile, final_restart, &
      30             :                 write_restart_field, read_restart_field
      31             : 
      32             : !=======================================================================
      33             : 
      34             :       contains
      35             : 
      36             : !=======================================================================
      37             : 
      38             : !=======================================================================
      39             : !---! these subroutines write/read Fortran unformatted data files ..
      40             : !=======================================================================
      41             : 
      42             : ! Dumps all values needed for a restart
      43             : ! author Elizabeth C. Hunke, LANL
      44             : 
      45         811 :       subroutine dumpfile
      46             : 
      47             :       use icedrv_calendar, only: sec, month, mday, nyr, istep1
      48             :       use icedrv_calendar, only: time, time_forc, year_init
      49             :       use icedrv_domain_size, only: nilyr, nslyr, ncat
      50             :       use icedrv_forcing, only: oceanmixed_ice
      51             :       use icedrv_flux, only: scale_factor, swvdr, swvdf, swidr, swidf
      52             :       use icedrv_flux, only: sst, frzmlt
      53             :       use icedrv_state, only: aicen, vicen, vsnon, trcrn
      54             : 
      55             :       ! local variables
      56             : 
      57             :       integer (kind=int_kind) :: &
      58             :          k, &              ! counting indices
      59             :          iyear
      60             : 
      61             :       integer (kind=int_kind) :: &
      62             :          nt_Tsfc, nt_sice, nt_qice, nt_qsno
      63             : 
      64             :       logical (kind=log_kind) :: &
      65             :          tr_iage, tr_FY, tr_lvl, tr_iso, tr_aero, tr_brine, &
      66             :          tr_pond_topo, tr_pond_cesm, tr_pond_lvl, tr_fsd
      67             : !         solve_zsal, skl_bgc, z_tracers
      68             : 
      69             :       character(len=char_len_long) :: filename
      70             :       character(len=*), parameter :: subname='(dumpfile)'
      71             : 
      72             :       ! construct path/file
      73         811 :       iyear = nyr + year_init - 1
      74             :       
      75         505 :       write(filename,'(a,a,a,i4.4,a,i2.2,a,i2.2,a,i5.5)') &
      76        1821 :          restart_dir(1:lenstr(restart_dir)), &
      77        1316 :          restart_file(1:lenstr(restart_file)),'.', &
      78        1622 :          iyear,'-',month,'-',mday,'-',sec
      79             :       
      80             :       call icepack_query_tracer_indices(nt_Tsfc_out=nt_Tsfc, nt_sice_out=nt_sice, &
      81         811 :            nt_qice_out=nt_qice, nt_qsno_out=nt_qsno)
      82             :       call icepack_query_tracer_flags(tr_iage_out=tr_iage, tr_FY_out=tr_FY, &
      83             :            tr_lvl_out=tr_lvl, tr_aero_out=tr_aero, tr_iso_out=tr_iso, &
      84             :            tr_brine_out=tr_brine, &
      85             :            tr_pond_topo_out=tr_pond_topo, tr_pond_cesm_out=tr_pond_cesm, &
      86         811 :            tr_pond_lvl_out=tr_pond_lvl,tr_fsd_out=tr_fsd)
      87             : !      call icepack_query_parameters(solve_zsal_out=solve_zsal, &
      88             : !         skl_bgc_out=skl_bgc, z_tracers_out=z_tracers)
      89         811 :       call icepack_warnings_flush(nu_diag)
      90         811 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
      91           0 :           file=__FILE__,line= __LINE__)
      92             : 
      93         811 :       open(nu_dump,file=filename,form='unformatted')
      94         811 :       write(nu_dump) istep1,time,time_forc
      95         811 :       write(nu_diag,*) 'Writing ',filename(1:lenstr(filename))
      96             :       
      97             :       !-----------------------------------------------------------------
      98             :       ! state variables
      99             :       ! Tsfc is the only tracer written to binary files.  All other
     100             :       ! tracers are written to their own dump/restart binary files.
     101             :       !-----------------------------------------------------------------
     102             : 
     103         811 :       call write_restart_field(nu_dump,aicen(:,:),ncat)
     104         811 :       call write_restart_field(nu_dump,vicen(:,:),ncat)
     105         811 :       call write_restart_field(nu_dump,vsnon(:,:),ncat)
     106         811 :       call write_restart_field(nu_dump,trcrn(:,nt_Tsfc,:),ncat)
     107        6092 :       do k=1,nilyr
     108        6092 :          call write_restart_field(nu_dump,trcrn(:,nt_sice+k-1,:),ncat)
     109             :       enddo
     110        6092 :       do k=1,nilyr
     111        6092 :          call write_restart_field(nu_dump,trcrn(:,nt_qice+k-1,:),ncat)
     112             :       enddo
     113        1754 :       do k=1,nslyr
     114        1754 :          call write_restart_field(nu_dump,trcrn(:,nt_qsno+k-1,:),ncat)
     115             :       enddo
     116             : 
     117             :       !-----------------------------------------------------------------
     118             :       ! radiation fields
     119             :       !-----------------------------------------------------------------
     120         811 :       call write_restart_field(nu_dump,scale_factor,1)
     121         811 :       call write_restart_field(nu_dump,swvdr,1)
     122         811 :       call write_restart_field(nu_dump,swvdf,1)
     123         811 :       call write_restart_field(nu_dump,swidr,1)
     124         811 :       call write_restart_field(nu_dump,swidf,1)
     125             : 
     126             :       !-----------------------------------------------------------------
     127             :       ! for mixed layer model
     128             :       !-----------------------------------------------------------------
     129         811 :       if (oceanmixed_ice) then
     130         811 :          call write_restart_field(nu_dump,sst,1)
     131         811 :          call write_restart_field(nu_dump,frzmlt,1)
     132             :       endif
     133             : 
     134             :       ! tracers
     135         811 :       if (tr_iage)      call write_restart_age()       ! ice age tracer
     136         811 :       if (tr_FY)        call write_restart_FY()        ! first-year area tracer
     137         811 :       if (tr_lvl)       call write_restart_lvl()       ! level ice tracer
     138         811 :       if (tr_pond_cesm) call write_restart_pond_cesm() ! CESM melt ponds
     139         811 :       if (tr_pond_lvl)  call write_restart_pond_lvl()  ! level-ice melt ponds
     140         811 :       if (tr_pond_topo) call write_restart_pond_topo() ! topographic melt ponds
     141         811 :       if (tr_iso)       call write_restart_iso()       ! ice isotopes
     142         811 :       if (tr_aero)      call write_restart_aero()      ! ice aerosols
     143         811 :       if (tr_brine)     call write_restart_hbrine()    ! brine height
     144         811 :       if (tr_fsd)       call write_restart_fsd()       ! floe size distribution
     145             : ! called in icedrv_RunMod.F90 to prevent circular dependencies
     146             : !      if (solve_zsal .or. skl_bgc .or. z_tracers) &
     147             : !                        call write_restart_bgc         ! biogeochemistry
     148             : 
     149         811 :       end subroutine dumpfile
     150             : 
     151             : !=======================================================================
     152             : 
     153             : ! Restarts from a dump
     154             : ! author Elizabeth C. Hunke, LANL
     155             : 
     156          15 :       subroutine restartfile (ice_ic)
     157             : 
     158             :       use icedrv_calendar, only: istep0, istep1, time, time_forc
     159             :       use icepack_intfc, only: icepack_aggregate
     160             :       use icedrv_domain_size, only: nilyr, nslyr, ncat
     161             :       use icedrv_domain_size, only: max_ntrcr, nx
     162             :       use icedrv_flux, only: swvdr, swvdf, swidr, swidf
     163             :       use icedrv_flux, only: sst, frzmlt, scale_factor
     164             :       use icedrv_forcing, only: oceanmixed_ice
     165             :       use icedrv_init, only: tmask
     166             :       use icedrv_state, only: trcr_depend, aice, vice, vsno, trcr
     167             :       use icedrv_state, only: aice0, aicen, vicen, vsnon, trcrn, aice_init
     168             :       use icedrv_state, only: trcr_base, nt_strata, n_trcr_strata
     169             : 
     170             :       character (*), optional :: ice_ic
     171             : 
     172             :       ! local variables
     173             : 
     174             :       integer (kind=int_kind) :: &
     175             :          i, k              ! counting indices
     176             : 
     177             :       integer (kind=int_kind) :: &
     178             :          nt_Tsfc, nt_sice, nt_qice, nt_qsno
     179             : 
     180             :       logical (kind=log_kind) :: &
     181             :          tr_iage, tr_FY, tr_lvl, tr_iso, tr_aero, tr_brine, &
     182             :          tr_pond_topo, tr_pond_cesm, tr_pond_lvl, tr_fsd
     183             : 
     184             :       character(len=char_len_long) :: filename
     185             :       character(len=*), parameter :: subname='(restartfile)'
     186             : 
     187          15 :       if (present(ice_ic)) then 
     188          15 :          filename = trim(ice_ic)
     189             :       else
     190             :          call icedrv_system_abort(string=subname//'no ice_ic present', &
     191           0 :                                   file=__FILE__,line=__LINE__)
     192             :       endif
     193             : 
     194          15 :       write(nu_diag,*) 'Using restart dump=', trim(filename)
     195          15 :       open(nu_restart,file=filename,form='unformatted')
     196          15 :       read (nu_restart) istep0,time,time_forc
     197          15 :       write(nu_diag,*) 'Restart read at istep=',istep0,time,time_forc
     198             : 
     199             :       call icepack_query_tracer_indices(nt_Tsfc_out=nt_Tsfc, nt_sice_out=nt_sice, &
     200          15 :            nt_qice_out=nt_qice, nt_qsno_out=nt_qsno)
     201             :       call icepack_query_tracer_flags(tr_iage_out=tr_iage, tr_FY_out=tr_FY, &
     202             :            tr_lvl_out=tr_lvl, tr_aero_out=tr_aero, tr_iso_out=tr_iso, &
     203             :            tr_brine_out=tr_brine, &
     204             :            tr_pond_topo_out=tr_pond_topo, tr_pond_cesm_out=tr_pond_cesm, &
     205          15 :            tr_pond_lvl_out=tr_pond_lvl,tr_fsd_out=tr_fsd)
     206          15 :       call icepack_warnings_flush(nu_diag)
     207          15 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     208           0 :           file=__FILE__,line= __LINE__)
     209             : 
     210          15 :       istep1 = istep0
     211             : 
     212             :       !-----------------------------------------------------------------
     213             :       ! state variables
     214             :       ! Tsfc is the only tracer read in this file.  All other
     215             :       ! tracers are in their own dump/restart files.
     216             :       !-----------------------------------------------------------------
     217          15 :       write(nu_diag,*) 'min/max area, vol ice, vol snow, Tsfc'
     218             : 
     219          15 :       call read_restart_field(nu_restart,aicen,ncat)
     220          15 :       call read_restart_field(nu_restart,vicen,ncat)
     221          15 :       call read_restart_field(nu_restart,vsnon,ncat)
     222          15 :       call read_restart_field(nu_restart,trcrn(:,nt_Tsfc,:),ncat)
     223             : 
     224          15 :       write(nu_diag,*) 'min/max sice for each layer'
     225         108 :       do k=1,nilyr
     226         108 :          call read_restart_field(nu_restart,trcrn(:,nt_sice+k-1,:),ncat)
     227             :       enddo
     228             :       
     229          15 :       write(nu_diag,*) 'min/max qice for each layer'
     230         108 :       do k=1,nilyr
     231         108 :          call read_restart_field(nu_restart,trcrn(:,nt_qice+k-1,:),ncat)
     232             :       enddo
     233             :       
     234          15 :       write(nu_diag,*) 'min/max qsno for each layer'
     235          34 :       do k=1,nslyr
     236          34 :          call read_restart_field(nu_restart,trcrn(:,nt_qsno+k-1,:),ncat)
     237             :       enddo
     238             : 
     239             :       !-----------------------------------------------------------------
     240             :       ! radiation fields
     241             :       !-----------------------------------------------------------------
     242             : 
     243          15 :       write(nu_diag,*) 'min/max radiation fields'
     244             : 
     245          15 :       call read_restart_field(nu_restart,scale_factor,1)
     246          15 :       call read_restart_field(nu_restart,swvdr,1)
     247          15 :       call read_restart_field(nu_restart,swvdf,1)
     248          15 :       call read_restart_field(nu_restart,swidr,1)
     249          15 :       call read_restart_field(nu_restart,swidf,1)
     250             : 
     251             :       !-----------------------------------------------------------------
     252             :       ! for mixed layer model
     253             :       !-----------------------------------------------------------------
     254             : 
     255          15 :       if (oceanmixed_ice) then
     256          15 :          write(nu_diag,*) 'min/max sst, frzmlt'
     257          15 :          call read_restart_field(nu_restart,sst,1)
     258          15 :          call read_restart_field(nu_restart,frzmlt,1)
     259             :       endif
     260             : 
     261             :       ! tracers
     262          15 :       if (tr_iage)      call read_restart_age()       ! ice age tracer
     263          15 :       if (tr_FY)        call read_restart_FY()        ! first-year area tracer
     264          15 :       if (tr_lvl)       call read_restart_lvl()       ! level ice tracer
     265          15 :       if (tr_pond_cesm) call read_restart_pond_cesm() ! CESM melt ponds
     266          15 :       if (tr_pond_lvl)  call read_restart_pond_lvl()  ! level-ice melt ponds
     267          15 :       if (tr_pond_topo) call read_restart_pond_topo() ! topographic melt ponds
     268          15 :       if (tr_iso)       call read_restart_iso()       ! ice isotopes
     269          15 :       if (tr_aero)      call read_restart_aero()      ! ice aerosols
     270          15 :       if (tr_brine)     call read_restart_hbrine      ! brine height
     271          15 :       if (tr_fsd)       call read_restart_fsd()       ! floe size distribution
     272             :       !-----------------------------------------------------------------
     273             :       ! Ensure ice is binned in correct categories
     274             :       ! (should not be necessary unless restarting from a run with
     275             :       !  different category boundaries).
     276             :       !
     277             :       ! If called, this subroutine does not give exact restart.
     278             :       !-----------------------------------------------------------------
     279             : !!!      call cleanup_itd
     280             : 
     281             :       !-----------------------------------------------------------------
     282             :       ! compute aggregate ice state and open water area
     283             :       !-----------------------------------------------------------------
     284             : 
     285          75 :       do i = 1, nx
     286          60 :          if (tmask(i)) &
     287             :          call icepack_aggregate (ncat=ncat,          &
     288             :                                  aicen=aicen(i,:),   &
     289             :                                  trcrn=trcrn(i,:,:), &
     290             :                                  vicen=vicen(i,:),   &
     291             :                                  vsnon=vsnon(i,:),   &
     292           3 :                                  aice=aice (i),      &
     293             :                                  trcr=trcr (i,:),    &
     294           3 :                                  vice=vice (i),      &
     295           3 :                                  vsno=vsno (i),      &
     296           3 :                                  aice0=aice0(i),     &
     297             :                                  ntrcr=max_ntrcr,    &
     298             :                                  trcr_depend=trcr_depend, &
     299             :                                  trcr_base=trcr_base,     &
     300             :                                  n_trcr_strata=n_trcr_strata, &
     301          51 :                                  nt_strata=nt_strata)
     302             : 
     303          75 :          aice_init(i) = aice(i)
     304             :       enddo
     305          15 :       call icepack_warnings_flush(nu_diag)
     306          15 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     307           0 :           file=__FILE__, line=__LINE__)
     308             : 
     309          15 :       end subroutine restartfile
     310             : 
     311             : !=======================================================================
     312             : 
     313             : ! Reads a single restart field
     314             : ! author Chris Newman, LANL
     315             : 
     316         723 :       subroutine read_restart_field(nu,work,ndim)
     317             : 
     318             :       use icedrv_domain_size, only: nx
     319             : 
     320             :       integer (kind=int_kind), intent(in) :: &
     321             :          nu            , & ! unit number (not used for netcdf)
     322             :          ndim             ! number of dimensions
     323             : 
     324             :       real (kind=dbl_kind), dimension(nx,ndim), intent(inout) :: &
     325             :          work              ! input array (real, 8-byte)
     326             : 
     327             :       ! local variables
     328             : 
     329             :       integer (kind=int_kind) :: &
     330             :          n, i               ! loop indices
     331             : 
     332             :       real (kind=dbl_kind), dimension(nx) :: &
     333         170 :          work2              ! input array (real, 8-byte)
     334             : 
     335             :       real (kind=dbl_kind) :: &
     336          34 :         minw, maxw, sumw    ! diagnostics
     337             : 
     338             :       character(len=*), parameter :: subname='(read_restart_field)'
     339             : 
     340        3770 :       do n = 1, ndim
     341       15235 :          read(nu) (work2(i), i=1,nx)
     342       15958 :          work(:,n) = work2(:)
     343             :       enddo
     344             : 
     345       15958 :       minw = minval(work)
     346       15958 :       maxw = maxval(work)
     347       15958 :       sumw = sum(work)
     348         723 :       write(nu_diag,*) subname, minw, maxw, sumw
     349             :       
     350         723 :       end subroutine read_restart_field
     351             :       
     352             : !=======================================================================
     353             : 
     354             : ! Writes a single restart field.
     355             : ! author Chris Newman, LANL
     356             : 
     357       32401 :       subroutine write_restart_field(nu,work,ndim)
     358             : 
     359             :       use icedrv_domain_size, only: nx
     360             : 
     361             :       integer (kind=int_kind), intent(in) :: &
     362             :          nu            , & ! unit number
     363             :          ndim              ! number of dimensions
     364             : 
     365             :       real (kind=dbl_kind), dimension(nx,ndim), intent(in) :: &
     366             :          work              ! input array (real, 8-byte)
     367             : 
     368             :       ! local variables
     369             : 
     370             :       integer (kind=int_kind) :: &
     371             :          n, i              ! loop indices
     372             :       
     373             :       real (kind=dbl_kind), dimension(nx) :: &
     374       87620 :          work2             ! input array (real, 8-byte)
     375             :       
     376             :       real (kind=dbl_kind) :: &
     377       17524 :         minw, maxw, sumw    ! diagnostics
     378             : 
     379             :       character(len=*), parameter :: subname='(write_restart_field)'
     380             : 
     381      166166 :       do n = 1, ndim
     382      668825 :         work2(:) = work(:,n)
     383      701226 :         write(nu) (work2(i), i=1,nx)
     384             :       enddo
     385             :       
     386      701226 :       minw = minval(work)
     387      701226 :       maxw = maxval(work)
     388      701226 :       sumw = sum(work)
     389       32401 :       write(nu_diag,*) subname, minw, maxw, sumw
     390             :       
     391       32401 :       end subroutine write_restart_field
     392             : 
     393             : !=======================================================================
     394             : 
     395             : ! Finalize the restart file.
     396             : ! author David A. Bailey, NCAR
     397             : 
     398         811 :       subroutine final_restart()
     399             : 
     400             :       use icedrv_calendar, only: istep1, time, time_forc
     401             : 
     402             :       character(len=*), parameter :: subname='(final_restart)'
     403             : 
     404         811 :       close(nu_dump)
     405         811 :       write(nu_diag,*) 'Restart read/written ',istep1,time,time_forc
     406             : 
     407         811 :       end subroutine final_restart
     408             : 
     409             : !=======================================================================
     410             : 
     411             : ! Dumps all values needed for restarting
     412             : !
     413             : ! authors Elizabeth C. Hunke, LANL
     414             : !         David A. Bailey, NCAR
     415             : 
     416          54 :       subroutine write_restart_pond_topo()
     417             : 
     418             :       use icedrv_state, only: trcrn
     419             :       use icedrv_domain_size, only: ncat
     420             : 
     421             :       integer (kind=int_kind) :: nt_apnd, nt_hpnd, nt_ipnd 
     422             :       character(len=*), parameter :: subname='(write_restart_pond_topo)'
     423             : 
     424             :       call icepack_query_tracer_indices(nt_apnd_out=nt_apnd, nt_hpnd_out=nt_hpnd, &
     425          54 :            nt_ipnd_out=nt_ipnd)
     426          54 :       call icepack_warnings_flush(nu_diag)
     427          54 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     428           0 :           file=__FILE__,line= __LINE__)
     429             : 
     430          54 :       call write_restart_field(nu_dump,trcrn(:,nt_apnd,:),ncat)
     431          54 :       call write_restart_field(nu_dump,trcrn(:,nt_hpnd,:),ncat)
     432          54 :       call write_restart_field(nu_dump,trcrn(:,nt_ipnd,:),ncat)
     433             : 
     434          54 :       end subroutine write_restart_pond_topo
     435             : 
     436             : !=======================================================================
     437             : 
     438             : ! Reads all values needed for a meltpond volume restart
     439             : !
     440             : ! authors Elizabeth C. Hunke, LANL
     441             : !         David A. Bailey, NCAR
     442             : 
     443           2 :       subroutine read_restart_pond_topo()
     444             : 
     445             :       use icedrv_state, only: trcrn
     446             :       use icedrv_domain_size, only: ncat
     447             :       integer (kind=int_kind) :: nt_apnd, nt_hpnd, nt_ipnd 
     448             :       character(len=*), parameter :: subname='(read_restart_pond_topo)'
     449             : 
     450             :       call icepack_query_tracer_indices(nt_apnd_out=nt_apnd, nt_hpnd_out=nt_hpnd, &
     451           2 :            nt_ipnd_out=nt_ipnd)
     452           2 :       call icepack_warnings_flush(nu_diag)
     453           2 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     454           0 :           file=__FILE__,line= __LINE__)
     455             : 
     456           2 :       write(nu_diag,*) 'min/max topo ponds'
     457             : 
     458           2 :       call read_restart_field(nu_restart,trcrn(:,nt_apnd,:),ncat)
     459           2 :       call read_restart_field(nu_restart,trcrn(:,nt_hpnd,:),ncat)
     460           2 :       call read_restart_field(nu_restart,trcrn(:,nt_ipnd,:),ncat)
     461             : 
     462           2 :       end subroutine read_restart_pond_topo
     463             : 
     464             : !=======================================================================
     465             : 
     466             : ! Dumps all values needed for restarting
     467             : ! author Elizabeth C. Hunke, LANL
     468             : 
     469          21 :       subroutine write_restart_age()
     470             : 
     471             :       use icedrv_state, only: trcrn
     472             :       use icedrv_domain_size, only: ncat
     473             :       integer (kind=int_kind) :: nt_iage
     474             :       character(len=*), parameter :: subname='(write_restart_age)'
     475             : 
     476          21 :       call icepack_query_tracer_indices(nt_iage_out=nt_iage)
     477          21 :       call icepack_warnings_flush(nu_diag)
     478          21 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     479           0 :           file=__FILE__,line= __LINE__)
     480             : 
     481          21 :       call write_restart_field(nu_dump,trcrn(:,nt_iage,:),ncat)
     482             : 
     483          21 :       end subroutine write_restart_age
     484             : 
     485             : !=======================================================================
     486             : 
     487             : ! Reads all values needed for an ice age restart
     488             : ! author Elizabeth C. Hunke, LANL
     489             : 
     490           1 :       subroutine read_restart_age()
     491             : 
     492             :       use icedrv_state, only: trcrn
     493             :       use icedrv_domain_size, only: ncat
     494             :       integer (kind=int_kind) :: nt_iage
     495             :       character(len=*), parameter :: subname='(read_restart_age)'
     496             : 
     497           1 :       write(nu_diag,*) 'min/max age (s)'
     498             : 
     499           1 :       call icepack_query_tracer_indices(nt_iage_out=nt_iage)
     500           1 :       call icepack_warnings_flush(nu_diag)
     501           1 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     502           0 :           file=__FILE__,line= __LINE__)
     503             : 
     504           1 :       call read_restart_field(nu_restart,trcrn(:,nt_iage,:),ncat)
     505             : 
     506           1 :       end subroutine read_restart_age
     507             : 
     508             : !=======================================================================
     509             : 
     510             : ! Dumps all values needed for restarting
     511             : ! author Elizabeth C. Hunke, LANL
     512             : 
     513          45 :       subroutine write_restart_fsd()
     514             : 
     515             :       use icedrv_state, only: trcrn
     516             :       use icedrv_domain_size, only: ncat, nfsd
     517             :       integer (kind=int_kind) :: nt_fsd, k
     518             :       character(len=*), parameter :: subname='(write_restart_fsd)'
     519             : 
     520          45 :       call icepack_query_tracer_indices(nt_fsd_out=nt_fsd)
     521          45 :       call icepack_warnings_flush(nu_diag)
     522          45 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     523           0 :           file=__FILE__,line= __LINE__)
     524             : 
     525         453 :       do k = 1, nfsd
     526         453 :           call write_restart_field(nu_dump,trcrn(:,nt_fsd+k-1,:),ncat)
     527             :       end do
     528             : 
     529          45 :       end subroutine write_restart_fsd
     530             : 
     531             : !=======================================================================
     532             : 
     533             : ! Reads all values needed for a FSD restart
     534             : ! author Elizabeth C. Hunke, LANL
     535             : 
     536           1 :       subroutine read_restart_fsd()
     537             : 
     538             :       use icedrv_state, only: trcrn
     539             :       use icedrv_domain_size, only: ncat, nfsd
     540             :       integer (kind=int_kind) :: nt_fsd, k
     541             :       character(len=*), parameter :: subname='(read_restart_fsd)'
     542             : 
     543           1 :       write(nu_diag,*) 'min/max fsd'
     544             : 
     545           1 :       call icepack_query_tracer_indices(nt_fsd_out=nt_fsd)
     546           1 :       call icepack_warnings_flush(nu_diag)
     547           1 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     548           0 :           file=__FILE__,line= __LINE__)
     549             : 
     550          13 :       do k =1, nfsd
     551          13 :           call read_restart_field(nu_restart,trcrn(:,nt_fsd+k-1,:),ncat)
     552             :       end do
     553             : 
     554           1 :       end subroutine read_restart_fsd
     555             : 
     556             : !=======================================================================
     557             : 
     558             : ! Dumps all values needed for restarting
     559             : ! author Elizabeth C. Hunke, LANL
     560             : 
     561          21 :       subroutine write_restart_FY()
     562             : 
     563             :       use icedrv_flux, only: frz_onset
     564             :       use icedrv_state, only: trcrn
     565             :       use icedrv_domain_size, only: ncat
     566             :       integer (kind=int_kind) :: nt_FY
     567             :       character(len=*), parameter :: subname='(write_restart_FY)'
     568             : 
     569          21 :       call icepack_query_tracer_indices(nt_FY_out=nt_FY)
     570          21 :       call icepack_warnings_flush(nu_diag)
     571          21 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     572           0 :           file=__FILE__,line= __LINE__)
     573             : 
     574          21 :       call write_restart_field(nu_dump,trcrn(:,nt_FY,:),ncat)
     575          21 :       call write_restart_field(nu_dump,frz_onset,1)
     576             : 
     577          21 :       end subroutine write_restart_FY
     578             : 
     579             : !=======================================================================
     580             : 
     581             : ! Reads all values needed for an ice FY restart
     582             : ! author Elizabeth C. Hunke, LANL
     583             : 
     584           1 :       subroutine read_restart_FY()
     585             : 
     586             :       use icedrv_flux, only: frz_onset
     587             :       use icedrv_state, only: trcrn
     588             :       use icedrv_domain_size, only: ncat
     589             :       integer (kind=int_kind) :: nt_FY
     590             :       character(len=*), parameter :: subname='(read_restart_FY)'
     591             : 
     592           1 :       call icepack_query_tracer_indices(nt_FY_out=nt_FY)
     593           1 :       call icepack_warnings_flush(nu_diag)
     594           1 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     595           0 :           file=__FILE__,line= __LINE__)
     596             : 
     597           1 :       write(nu_diag,*) 'min/max first-year ice area'
     598             : 
     599           1 :       call read_restart_field(nu_restart,trcrn(:,nt_FY,:),ncat)
     600             : 
     601           1 :       write(nu_diag,*) 'min/max frz_onset'
     602             : 
     603           1 :       call read_restart_field(nu_restart,frz_onset,1)
     604             : 
     605           1 :       end subroutine read_restart_FY
     606             : 
     607             : !=======================================================================
     608             : 
     609             : ! Dumps all values needed for restarting
     610             : !
     611             : ! author Elizabeth C. Hunke, LANL
     612             : 
     613         769 :       subroutine write_restart_lvl()
     614             : 
     615             :       use icedrv_state, only: trcrn
     616             :       use icedrv_domain_size, only: ncat
     617             :       integer (kind=int_kind) :: nt_alvl, nt_vlvl
     618             :       character(len=*), parameter :: subname='(write_restart_lvl)'
     619             : 
     620         769 :       call icepack_query_tracer_indices(nt_alvl_out=nt_alvl, nt_vlvl_out=nt_vlvl)
     621         769 :       call icepack_warnings_flush(nu_diag)
     622         769 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     623           0 :           file=__FILE__,line= __LINE__)
     624             : 
     625         769 :       call write_restart_field(nu_dump,trcrn(:,nt_alvl,:),ncat)
     626         769 :       call write_restart_field(nu_dump,trcrn(:,nt_vlvl,:),ncat)
     627             : 
     628         769 :       end subroutine write_restart_lvl
     629             : 
     630             : !=======================================================================
     631             : 
     632             : ! Reads all values needed for an ice lvl restart
     633             : !
     634             : ! author Elizabeth C. Hunke, LANL
     635             : 
     636          13 :       subroutine read_restart_lvl()
     637             : 
     638             :       use icedrv_state, only: trcrn
     639             :       use icedrv_domain_size, only: ncat
     640             :       integer (kind=int_kind) :: nt_alvl, nt_vlvl
     641             :       character(len=*), parameter :: subname='(read_restart_lvl)'
     642             : 
     643          13 :       call icepack_query_tracer_indices(nt_alvl_out=nt_alvl, nt_vlvl_out=nt_vlvl)
     644          13 :       call icepack_warnings_flush(nu_diag)
     645          13 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     646           0 :           file=__FILE__,line= __LINE__)
     647             : 
     648          13 :       write(nu_diag,*) 'min/max level ice area, volume'
     649             : 
     650          13 :       call read_restart_field(nu_restart,trcrn(:,nt_alvl,:),ncat)
     651          13 :       call read_restart_field(nu_restart,trcrn(:,nt_vlvl,:),ncat)
     652             : 
     653          13 :       end subroutine read_restart_lvl
     654             : 
     655             : !=======================================================================!
     656             : 
     657             : ! Dumps all values needed for restarting
     658             : !
     659             : ! authors Elizabeth C. Hunke, LANL
     660             : !         David A. Bailey, NCAR
     661             : 
     662          21 :       subroutine write_restart_pond_cesm()
     663             : 
     664             :       use icedrv_state, only: trcrn
     665             :       use icedrv_domain_size, only: ncat
     666             :       integer (kind=int_kind) :: nt_apnd, nt_hpnd
     667             :       character(len=*), parameter :: subname='(write_restart_pond_cesm)'
     668             : 
     669          21 :       call icepack_query_tracer_indices(nt_apnd_out=nt_apnd, nt_hpnd_out=nt_hpnd)
     670          21 :       call icepack_warnings_flush(nu_diag)
     671          21 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     672           0 :           file=__FILE__,line= __LINE__)
     673             : 
     674          21 :       call write_restart_field(nu_dump,trcrn(:,nt_apnd,:),ncat)
     675          21 :       call write_restart_field(nu_dump,trcrn(:,nt_hpnd,:),ncat)
     676             : 
     677          21 :       end subroutine write_restart_pond_cesm
     678             : 
     679             : !=======================================================================
     680             : 
     681             : ! Reads all values needed for a meltpond volume restart
     682             : !
     683             : ! authors Elizabeth C. Hunke, LANL
     684             : !         David A. Bailey, NCAR
     685             : 
     686           1 :       subroutine read_restart_pond_cesm()
     687             : 
     688             :       use icedrv_state, only: trcrn
     689             :       use icedrv_domain_size, only: ncat
     690             :       integer (kind=int_kind) :: nt_apnd, nt_hpnd
     691             :       character(len=*), parameter :: subname='(read_restart_pond_cesm)'
     692             : 
     693           1 :       call icepack_query_tracer_indices(nt_apnd_out=nt_apnd, nt_hpnd_out=nt_hpnd)
     694           1 :       call icepack_warnings_flush(nu_diag)
     695           1 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     696           0 :           file=__FILE__,line= __LINE__)
     697             : 
     698           1 :       write(nu_diag,*) 'min/max cesm ponds'
     699             : 
     700           1 :       call read_restart_field(nu_restart,trcrn(:,nt_apnd,:),ncat)
     701           1 :       call read_restart_field(nu_restart,trcrn(:,nt_hpnd,:),ncat)
     702             : 
     703           1 :       end subroutine read_restart_pond_cesm
     704             : 
     705             : !=======================================================================
     706             : !
     707             : ! Dumps all values needed for restarting
     708             : !
     709             : ! authors Elizabeth C. Hunke, LANL
     710             : 
     711         637 :       subroutine write_restart_pond_lvl()
     712             : 
     713             :       use icedrv_arrays_column, only: dhsn, ffracn
     714             :       use icedrv_flux, only: fsnow
     715             :       use icedrv_state, only: trcrn
     716             :       use icedrv_domain_size, only: ncat
     717             :       integer (kind=int_kind) :: nt_apnd, nt_hpnd, nt_ipnd
     718             :       character(len=*), parameter :: subname='(write_restart_pond_lvl)'
     719             : 
     720             :       call icepack_query_tracer_indices(nt_apnd_out=nt_apnd, nt_hpnd_out=nt_hpnd, &
     721         637 :            nt_ipnd_out=nt_ipnd)
     722         637 :       call icepack_warnings_flush(nu_diag)
     723         637 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     724           0 :           file=__FILE__,line= __LINE__)
     725             : 
     726         637 :       call write_restart_field(nu_dump,trcrn(:,nt_apnd,:),ncat)
     727         637 :       call write_restart_field(nu_dump,trcrn(:,nt_hpnd,:),ncat)
     728         637 :       call write_restart_field(nu_dump,trcrn(:,nt_ipnd,:),ncat)
     729         637 :       call write_restart_field(nu_dump,fsnow(:),1)
     730         637 :       call write_restart_field(nu_dump,dhsn(:,:),ncat)
     731         637 :       call write_restart_field(nu_dump,ffracn(:,:),ncat)
     732             : 
     733         637 :       end subroutine write_restart_pond_lvl
     734             : 
     735             : !=======================================================================
     736             : 
     737             : ! Reads all values needed for a meltpond volume restart
     738             : !
     739             : ! authors Elizabeth C. Hunke, LANL
     740             : 
     741           9 :       subroutine read_restart_pond_lvl()
     742             : 
     743             :       use icedrv_arrays_column, only: dhsn, ffracn
     744             :       use icedrv_flux, only: fsnow
     745             :       use icedrv_state, only: trcrn
     746             :       use icedrv_domain_size, only: ncat
     747             :       integer (kind=int_kind) :: nt_apnd, nt_hpnd, nt_ipnd
     748             :       character(len=*), parameter :: subname='(write_restart_pond_lvl)'
     749             : 
     750             :       call icepack_query_tracer_indices(nt_apnd_out=nt_apnd, nt_hpnd_out=nt_hpnd, &
     751           9 :            nt_ipnd_out=nt_ipnd)
     752           9 :       call icepack_warnings_flush(nu_diag)
     753           9 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     754           0 :           file=__FILE__,line= __LINE__)
     755             : 
     756           9 :       write(nu_diag,*) 'min/max level-ice ponds'
     757             : 
     758           9 :       call read_restart_field(nu_restart,trcrn(:,nt_apnd,:),ncat)
     759           9 :       call read_restart_field(nu_restart,trcrn(:,nt_hpnd,:),ncat)
     760           9 :       call read_restart_field(nu_restart,trcrn(:,nt_ipnd,:),ncat)
     761           9 :       call read_restart_field(nu_restart,fsnow(:),1)
     762           9 :       call read_restart_field(nu_restart,dhsn(:,:),ncat)
     763           9 :       call read_restart_field(nu_restart,ffracn(:,:),ncat)
     764             : 
     765           9 :       end subroutine read_restart_pond_lvl
     766             : 
     767             : !=======================================================================
     768             : 
     769             : ! Dumps all values needed for restarting
     770             : !
     771             : ! authors Elizabeth Hunke, LANL
     772             : !         David Bailey, NCAR
     773             : !         Marika Holland, NCAR
     774             : 
     775          21 :       subroutine write_restart_aero()
     776             : 
     777             :       use icedrv_domain_size, only: n_aero
     778             :       use icedrv_state, only: trcrn
     779             :       use icedrv_domain_size, only: ncat
     780             : 
     781             :       ! local variables
     782             : 
     783             :       integer (kind=int_kind) :: &
     784             :          k                    ! loop indices
     785             :       integer (kind=int_kind) :: nt_aero
     786             :       character(len=*), parameter :: subname='(write_restart_aero)'
     787             :     
     788          21 :       call icepack_query_tracer_indices(nt_aero_out=nt_aero)
     789          21 :       call icepack_warnings_flush(nu_diag)
     790          21 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     791           0 :           file=__FILE__,line= __LINE__)
     792             : 
     793          21 :       write(nu_diag,*) 'write_restart_aero (aerosols)'
     794             : 
     795          42 :       do k = 1, n_aero
     796          21 :          call write_restart_field(nu_dump, trcrn(:,nt_aero  +(k-1)*4,:), ncat)
     797          21 :          call write_restart_field(nu_dump, trcrn(:,nt_aero+1+(k-1)*4,:), ncat)
     798          21 :          call write_restart_field(nu_dump, trcrn(:,nt_aero+2+(k-1)*4,:), ncat)
     799          42 :          call write_restart_field(nu_dump, trcrn(:,nt_aero+3+(k-1)*4,:), ncat)
     800             :       enddo
     801             : 
     802          21 :       end subroutine write_restart_aero
     803             : 
     804             : !=======================================================================
     805             : 
     806             : ! Reads all values needed for an ice aerosol restart
     807             : !
     808             : ! authors Elizabeth Hunke, LANL
     809             : !         David Bailey, NCAR
     810             : !         Marika Holland, NCAR
     811             : 
     812           1 :       subroutine read_restart_aero()
     813             : 
     814             :       use icedrv_domain_size, only: n_aero
     815             :       use icedrv_state, only: trcrn
     816             :       use icedrv_domain_size, only: ncat
     817             : 
     818             :       ! local variables
     819             : 
     820             :       integer (kind=int_kind) :: &
     821             :          k                    ! loop indices
     822             :       integer (kind=int_kind) :: nt_aero
     823             :       character(len=*), parameter :: subname='(read_restart_aero)'
     824             : 
     825             :       !-----------------------------------------------------------------
     826             : 
     827           1 :       call icepack_query_tracer_indices(nt_aero_out=nt_aero)
     828           1 :       call icepack_warnings_flush(nu_diag)
     829           1 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     830           0 :           file=__FILE__,line= __LINE__)
     831             : 
     832           1 :       write(nu_diag,*) 'read_restart_aero (aerosols)'
     833             : 
     834           2 :       do k = 1, n_aero
     835           1 :          call read_restart_field(nu_restart, trcrn(:,nt_aero  +(k-1)*4,:), ncat)
     836           1 :          call read_restart_field(nu_restart, trcrn(:,nt_aero+1+(k-1)*4,:), ncat)
     837           1 :          call read_restart_field(nu_restart, trcrn(:,nt_aero+2+(k-1)*4,:), ncat)
     838           2 :          call read_restart_field(nu_restart, trcrn(:,nt_aero+3+(k-1)*4,:), ncat)
     839             :       enddo
     840             : 
     841           1 :       end subroutine read_restart_aero
     842             : 
     843             : !=======================================================================
     844             : 
     845             : ! Dumps all values needed for restarting
     846             : !
     847             : ! authors Elizabeth Hunke, LANL
     848             : !         David Bailey, NCAR
     849             : !         Marika Holland, NCAR
     850             : 
     851          21 :       subroutine write_restart_iso()
     852             : 
     853             :       use icedrv_domain_size, only: n_iso
     854             :       use icedrv_state, only: trcrn
     855             :       use icedrv_domain_size, only: ncat
     856             : 
     857             :       ! local variables
     858             : 
     859             :       integer (kind=int_kind) :: &
     860             :          k                    ! loop indices
     861             :       integer (kind=int_kind) :: nt_isosno, nt_isoice
     862             :       character(len=*), parameter :: subname='(write_restart_iso)'
     863             :     
     864          21 :       call icepack_query_tracer_indices(nt_isosno_out=nt_isosno)
     865          21 :       call icepack_query_tracer_indices(nt_isoice_out=nt_isoice)
     866          21 :       call icepack_warnings_flush(nu_diag)
     867          21 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     868           0 :           file=__FILE__,line= __LINE__)
     869             : 
     870          21 :       write(nu_diag,*) 'write_restart_iso (isotopes)'
     871             : 
     872          84 :       do k = 1, n_iso
     873          63 :          call write_restart_field(nu_dump, trcrn(:,nt_isosno+(k-1),:), ncat)
     874          84 :          call write_restart_field(nu_dump, trcrn(:,nt_isoice+(k-1),:), ncat)
     875             :       enddo
     876             : 
     877          21 :       end subroutine write_restart_iso
     878             : 
     879             : !=======================================================================
     880             : 
     881             : ! Reads all values needed for an ice isotope restart
     882             : !
     883             : ! authors Elizabeth Hunke, LANL
     884             : !         David Bailey, NCAR
     885             : !         Marika Holland, NCAR
     886             : 
     887           1 :       subroutine read_restart_iso()
     888             : 
     889             :       use icedrv_domain_size, only: n_iso
     890             :       use icedrv_state, only: trcrn
     891             :       use icedrv_domain_size, only: ncat
     892             : 
     893             :       ! local variables
     894             : 
     895             :       integer (kind=int_kind) :: &
     896             :          k                    ! loop indices
     897             :       integer (kind=int_kind) :: nt_isosno, nt_isoice
     898             :       character(len=*), parameter :: subname='(read_restart_iso)'
     899             : 
     900             :       !-----------------------------------------------------------------
     901             : 
     902           1 :       call icepack_query_tracer_indices(nt_isosno_out=nt_isosno)
     903           1 :       call icepack_query_tracer_indices(nt_isoice_out=nt_isoice)
     904           1 :       call icepack_warnings_flush(nu_diag)
     905           1 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     906           0 :           file=__FILE__,line= __LINE__)
     907             : 
     908           1 :       write(nu_diag,*) 'read_restart_iso (isotopes)'
     909             : 
     910           4 :       do k = 1, n_iso
     911           3 :          call read_restart_field(nu_restart, trcrn(:,nt_isosno+(k-1),:), ncat)
     912           4 :          call read_restart_field(nu_restart, trcrn(:,nt_isoice+(k-1),:), ncat)
     913             :       enddo
     914             : 
     915           1 :       end subroutine read_restart_iso
     916             : 
     917             : !=======================================================================
     918             : 
     919          25 :       subroutine write_restart_hbrine()
     920             : 
     921             : ! Dumps all values needed for a hbrine restart
     922             : ! author Elizabeth C. Hunke, LANL
     923             : 
     924             :       use icedrv_arrays_column, only: first_ice, first_ice_real
     925             :       use icedrv_state, only: trcrn
     926             :       use icedrv_domain_size, only: ncat, nx
     927             : 
     928             :       ! local variables
     929             : 
     930             :       integer (kind=int_kind) :: &
     931             :          i, n ! horizontal indices
     932             :       integer (kind=int_kind) :: nt_fbri
     933             :       character(len=*), parameter :: subname='(write_restart_hbrine)'
     934             : 
     935          25 :       call icepack_query_tracer_indices(nt_fbri_out=nt_fbri)
     936          25 :       call icepack_warnings_flush(nu_diag)
     937          25 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     938           0 :           file=__FILE__,line= __LINE__)
     939             : 
     940         125 :         do i = 1, nx  
     941         625 :            do n = 1, ncat
     942         600 :               if (first_ice     (i,n)) then
     943         250 :                   first_ice_real(i,n) = c1
     944             :               else
     945         250 :                   first_ice_real(i,n) = c0
     946             :               endif
     947             :            enddo ! n
     948             :         enddo    ! i
     949             : 
     950          25 :         call write_restart_field(nu_dump,trcrn(:,nt_fbri,:),ncat)
     951          25 :         call write_restart_field(nu_dump,first_ice_real(:,:),ncat)
     952             : 
     953          25 :       end subroutine write_restart_hbrine
     954             : 
     955             : !=======================================================================
     956             : 
     957           1 :       subroutine read_restart_hbrine()
     958             : 
     959             : ! Reads all values needed for hbrine
     960             : ! author Elizabeth C. Hunke, LANL
     961             : 
     962             :       use icedrv_arrays_column, only: first_ice_real, first_ice
     963             :       use icedrv_state, only: trcrn
     964             :       use icedrv_domain_size, only: ncat, nx
     965             : 
     966             :       ! local variables
     967             : 
     968             :       integer (kind=int_kind) :: &
     969             :          i, n ! horizontal indices
     970             :       integer (kind=int_kind) :: nt_fbri
     971             :       character(len=*), parameter :: subname='(read_restart_hbrine)'
     972             : 
     973           1 :       call icepack_query_tracer_indices(nt_fbri_out=nt_fbri)
     974           1 :       call icepack_warnings_flush(nu_diag)
     975           1 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     976           0 :           file=__FILE__,line= __LINE__)
     977             : 
     978           1 :       write(nu_diag,*) 'read brine restart'
     979             : 
     980           1 :       call read_restart_field(nu_restart,trcrn(:,nt_fbri,:),ncat)
     981           1 :       call read_restart_field(nu_restart,first_ice_real(:,:),ncat)
     982             : 
     983           5 :          do i = 1, nx
     984          25 :             do n = 1, ncat
     985          24 :                if (first_ice_real(i,n) >= p5) then
     986          11 :                    first_ice     (i,n) = .true.
     987             :                else
     988           9 :                    first_ice     (i,n) = .false.
     989             :                endif
     990             :             enddo ! ncat
     991             :          enddo    ! i 
     992             : 
     993           1 :       end subroutine read_restart_hbrine
     994             : 
     995             : !=======================================================================
     996             : 
     997             :       end module icedrv_restart
     998             : 
     999             : !=======================================================================

Generated by: LCOV version 1.14-6-g40580cd