LCOV - code coverage report
Current view: top level - configuration/driver - icedrv_InitMod.F90 (source / functions) Coverage Total Hit
Test: 250117-002718:9f4b99afd9:4:base,io,travis,quick Lines: 88.66 % 97 86
Test Date: 2025-01-16 18:02:43 Functions: 100.00 % 2 2

            Line data    Source code
       1              : !=======================================================================
       2              : !
       3              : !  This module contains the Icepack initialization routine that sets model
       4              : !  parameters and initializes the grid and state variables.
       5              : !
       6              : !  authors Elizabeth C. Hunke, LANL
       7              : 
       8              :       module icedrv_InitMod
       9              : 
      10              :       use icedrv_kinds
      11              :       use icedrv_constants, only: nu_diag
      12              :       use icepack_intfc, only: icepack_warnings_flush, icepack_warnings_aborted
      13              :       use icepack_intfc, only: icepack_query_parameters, icepack_query_tracer_flags
      14              :       use icepack_intfc, only: icepack_query_tracer_sizes
      15              :       use icepack_intfc, only: icepack_write_tracer_flags, icepack_write_tracer_indices
      16              :       use icepack_intfc, only: icepack_write_tracer_sizes, icepack_write_parameters
      17              :       use icedrv_system, only: icedrv_system_abort, icedrv_system_flush
      18              : 
      19              :       implicit none
      20              :       private
      21              :       public :: icedrv_initialize
      22              : 
      23              : !=======================================================================
      24              : 
      25              :       contains
      26              : 
      27              : !=======================================================================
      28              : 
      29              : 
      30              : !  Initialize Icepack
      31              : 
      32          747 :       subroutine icedrv_initialize
      33              : 
      34              :       use icedrv_arrays_column, only: hin_max, c_hi_range, floe_rad_c
      35              :       use icedrv_calendar, only: dt, time, istep, istep1, &
      36              :           init_calendar, calendar
      37              :       use icepack_intfc, only: icepack_init_itd, icepack_init_itd_hist
      38              :       use icepack_intfc, only: icepack_init_fsd_bounds
      39              :       use icepack_intfc, only: icepack_init_snow
      40              :       use icepack_intfc, only: icepack_warnings_flush
      41              :       use icedrv_domain_size, only: ncat
      42              : !     use icedrv_diagnostics, only: icedrv_diagnostics_debug
      43              :       use icedrv_flux, only: init_coupler_flux, init_history_therm, &
      44              :           init_flux_atm_ocn
      45              :       use icedrv_forcing, only: init_forcing, get_forcing, get_wave_spec
      46              :       use icedrv_forcing_bgc, only: get_forcing_bgc, faero_default, fiso_default, init_forcing_bgc
      47              :       use icedrv_restart_shared, only: restart
      48              :       use icedrv_init, only: input_data, init_state, init_grid2, init_fsd
      49              :       use icedrv_init_column, only: init_thermo_vertical, init_shortwave, init_zbgc
      50              :       use icepack_intfc, only: icepack_configure
      51              : 
      52              :       logical (kind=log_kind) :: &
      53              :          skl_bgc, &    ! from icepack
      54              :          z_tracers, &  ! from icepack
      55              :          tr_snow, &    ! from icepack
      56              :          tr_aero, &    ! from icepack
      57              :          tr_iso, &     ! from icepack
      58              :          tr_zaero, &   ! from icepack
      59              :          tr_fsd, wave_spec
      60              : 
      61              :       character(len=*), parameter :: subname='(icedrv_initialize)'
      62              : 
      63           83 :       call icepack_configure()  ! initialize icepack
      64           83 :       call icepack_warnings_flush(nu_diag)
      65           83 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
      66            0 :           file=__FILE__,line= __LINE__)
      67              : 
      68           83 :       call input_data           ! namelist variables
      69           83 :       call init_zbgc            ! vertical biogeochemistry namelist
      70              : 
      71              :       ! generate some output
      72           83 :       call icepack_write_tracer_flags(nu_diag)
      73           83 :       call icepack_write_tracer_sizes(nu_diag)
      74           83 :       call icepack_write_tracer_indices(nu_diag)
      75           83 :       call icepack_warnings_flush(nu_diag)
      76           83 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
      77            0 :           file=__FILE__,line= __LINE__)
      78              : 
      79           83 :       call init_grid2           ! grid variables
      80           83 :       call init_calendar        ! initialize some calendar stuff
      81           83 :       call init_coupler_flux    ! initialize fluxes exchanged with coupler
      82           83 :       call init_thermo_vertical ! initialize vertical thermodynamics
      83           83 :       call icepack_init_itd(hin_max=hin_max)
      84              : 
      85           83 :       call icepack_warnings_flush(nu_diag)
      86           83 :       if (icepack_warnings_aborted(subname)) then
      87            0 :          call icedrv_system_abort(file=__FILE__,line=__LINE__)
      88              :       endif
      89              : 
      90           83 :       call icepack_init_itd_hist(c_hi_range=c_hi_range, hin_max=hin_max) ! output
      91              : 
      92           83 :       call icepack_query_tracer_flags(tr_fsd_out=tr_fsd)
      93           83 :       call icepack_warnings_flush(nu_diag)
      94           83 :       if (icepack_warnings_aborted(subname)) then
      95            0 :          call icedrv_system_abort(file=__FILE__,line=__LINE__)
      96              :       endif
      97              : 
      98           83 :       if (tr_fsd) then
      99            4 :          call icepack_init_fsd_bounds(floe_rad_c_out=floe_rad_c,  write_diags=.true. )
     100            4 :          call icepack_warnings_flush(nu_diag)
     101            4 :          if (icepack_warnings_aborted(subname)) then
     102            0 :             call icedrv_system_abort(file=__FILE__,line=__LINE__)
     103              :          endif
     104              :       endif
     105           83 :       call init_fsd
     106              : 
     107           83 :       call calendar(time)       ! determine the initial date
     108              : 
     109           83 :       call init_state           ! initialize the ice state
     110           83 :       call init_restart         ! initialize restart variables
     111           83 :       call init_history_therm   ! initialize thermo history variables
     112              : 
     113           83 :       if (restart) &
     114           27 :          call init_shortwave    ! initialize radiative transfer
     115              : 
     116           83 :       call icepack_write_parameters(nu_diag)
     117              : 
     118           83 :       istep  = istep  + 1    ! update time step counters
     119           83 :       istep1 = istep1 + 1
     120           83 :       time = time + dt       ! determine the time and date
     121           83 :       call calendar(time)    ! at the end of the first timestep
     122              : 
     123              :    !--------------------------------------------------------------------
     124              :    ! coupler communication or forcing data initialization
     125              :    !--------------------------------------------------------------------
     126           83 :       call icepack_query_parameters(skl_bgc_out=skl_bgc)
     127           83 :       call icepack_query_parameters(z_tracers_out=z_tracers)
     128           83 :       call icepack_query_parameters(wave_spec_out=wave_spec)
     129           83 :       call icepack_query_tracer_flags(tr_snow_out=tr_snow)
     130           83 :       call icepack_query_tracer_flags(tr_aero_out=tr_aero)
     131           83 :       call icepack_query_tracer_flags(tr_iso_out=tr_iso)
     132           83 :       call icepack_query_tracer_flags(tr_zaero_out=tr_zaero)
     133           83 :       call icepack_warnings_flush(nu_diag)
     134           83 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     135            0 :           file=__FILE__,line= __LINE__)
     136              : 
     137           83 :       call init_forcing      ! initialize forcing (standalone)
     138           83 :       if (skl_bgc .or. z_tracers) call init_forcing_bgc !cn
     139           83 :       if (tr_fsd .and. wave_spec) call get_wave_spec ! wave spectrum in ice
     140           83 :       call get_forcing(istep1)       ! get forcing from data arrays
     141              : 
     142           83 :       if (tr_snow) then
     143           12 :          call icepack_init_snow            ! snow aging table
     144           12 :          call icepack_warnings_flush(nu_diag)
     145           12 :          if (icepack_warnings_aborted(subname)) then
     146            0 :             call icedrv_system_abort(file=__FILE__,line=__LINE__)
     147              :          endif
     148              :       endif
     149              : 
     150           83 :       if (tr_iso)     call fiso_default                 ! default values
     151              :       ! aerosols
     152              :       ! if (tr_aero)  call faero_data                   ! data file
     153              :       ! if (tr_zaero) call fzaero_data                  ! data file (gx1)
     154           83 :       if (tr_aero .or. tr_zaero)  call faero_default    ! default values
     155           83 :       if (skl_bgc .or. z_tracers) call get_forcing_bgc  ! biogeochemistry
     156              : 
     157           83 :       if (.not. restart) &
     158           56 :          call init_shortwave    ! initialize radiative transfer using current swdn
     159              : 
     160           83 :       call init_flux_atm_ocn    ! initialize atmosphere, ocean fluxes
     161              : 
     162           83 :       call icedrv_system_flush(nu_diag)
     163              : 
     164           83 :       end subroutine icedrv_initialize
     165              : 
     166              : !=======================================================================
     167              : 
     168          332 :       subroutine init_restart
     169              : 
     170              :       use icedrv_calendar, only: time, calendar
     171              :       use icedrv_constants, only: nu_restart
     172              :       use icepack_intfc, only: icepack_aggregate
     173              :       use icedrv_domain_size, only: ncat, max_ntrcr, nx
     174              :       use icedrv_init, only: ice_ic
     175              :       use icedrv_init, only: tmask
     176              :       use icedrv_init_column, only: init_hbrine, init_bgc
     177              :       use icedrv_flux, only: Tf
     178              :       use icedrv_restart, only: restartfile
     179              :       use icedrv_restart_shared, only: restart
     180              :       use icedrv_restart_bgc, only: read_restart_bgc
     181              :       use icedrv_state ! almost everything
     182              : 
     183              :       integer(kind=int_kind) :: &
     184              :          i,          & ! horizontal indices
     185              :          ntrcr         ! tracer count
     186              : 
     187              :       logical (kind=log_kind) :: &
     188              :          skl_bgc,    & ! from icepack
     189              :          z_tracers,  & ! from icepack
     190              :          tr_brine,   & ! from icepack
     191              :          tr_fsd        ! from icepack
     192              : 
     193              :       character(len=*), parameter :: subname='(init_restart)'
     194              : 
     195              :       !-----------------------------------------------------------------
     196              :       ! query Icepack values
     197              :       !-----------------------------------------------------------------
     198              : 
     199           83 :       call icepack_query_parameters(skl_bgc_out=skl_bgc)
     200           83 :       call icepack_query_parameters(z_tracers_out=z_tracers)
     201           83 :       call icepack_query_tracer_flags(tr_brine_out=tr_brine, tr_fsd_out=tr_fsd)
     202           83 :       call icepack_query_tracer_sizes(ntrcr_out=ntrcr)
     203           83 :       call icepack_warnings_flush(nu_diag)
     204           83 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     205            0 :           file=__FILE__,line= __LINE__)
     206              : 
     207              :       !-----------------------------------------------------------------
     208              : 
     209           83 :       if (tr_brine .or. skl_bgc) then ! brine height tracer
     210            9 :         call init_hbrine
     211              :       endif
     212              : 
     213           83 :       if (restart) then
     214           27 :          call restartfile (ice_ic)
     215           27 :          call calendar (time)
     216              :       endif
     217              : 
     218           83 :       if (skl_bgc .or. z_tracers) then
     219            9 :         if (tr_fsd) then
     220            0 :             write (nu_diag,*) 'FSD implementation incomplete for use with BGC'
     221            0 :             call icedrv_system_abort(string=subname,file=__FILE__,line=__LINE__)
     222              :          endif
     223            9 :          call init_bgc
     224            9 :          if (restart) call read_restart_bgc ! complete BGC initialization
     225              :       endif
     226              : 
     227           83 :       close (nu_restart)
     228              : 
     229              :       !-----------------------------------------------------------------
     230              :       ! aggregate tracers
     231              :       !-----------------------------------------------------------------
     232          415 :       do i = 1, nx
     233          332 :          if (tmask(i)) &
     234              :          call icepack_aggregate(trcrn=trcrn(i,1:ntrcr,:),     &
     235              :                                 aicen=aicen(i,:),             &
     236              :                                 vicen=vicen(i,:),             &
     237              :                                 vsnon=vsnon(i,:),             &
     238              :                                 trcr=trcr (i,1:ntrcr),        &
     239              :                                 aice=aice (i),                &
     240              :                                 vice=vice (i),                &
     241              :                                 vsno=vsno (i),                &
     242              :                                 aice0=aice0(i),               &
     243              :                                 trcr_depend=trcr_depend(1:ntrcr),     &
     244              :                                 trcr_base=trcr_base    (1:ntrcr,:),   &
     245              :                                 n_trcr_strata=n_trcr_strata(1:ntrcr), &
     246              :                                 nt_strata=nt_strata    (1:ntrcr,:), &
     247          332 :                                 Tf = Tf(i))
     248              :       enddo
     249           83 :       call icepack_warnings_flush(nu_diag)
     250           83 :       if (icepack_warnings_aborted()) call icedrv_system_abort(string=subname, &
     251            0 :           file=__FILE__, line=__LINE__)
     252              : 
     253           83 :       end subroutine init_restart
     254              : 
     255              : !=======================================================================
     256              : 
     257              :       end module icedrv_InitMod
     258              : 
     259              : !=======================================================================
        

Generated by: LCOV version 2.0-1