New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
scice.F90 in NEMO/branches/UKMO/dev_r10037_GPU/src/ICE – NEMO

source: NEMO/branches/UKMO/dev_r10037_GPU/src/ICE/scice.F90 @ 12806

Last change on this file since 12806 was 11467, checked in by andmirek, 5 years ago

Ticket #2197 allocate arrays at the beggining of the run

File size: 5.7 KB
Line 
1MODULE scice
2   !!======================================================================
3   !!                      ***  MODULE  oce  ***
4   !! Ocean        :  dynamics and active tracers defined in memory
5   !!======================================================================
6   !! History :  1.0  !  2002-11  (G. Madec)  F90: Free form and module
7   !!            3.1  !  2009-02  (G. Madec, M. Leclair)  pure z*
8   !coordinate
9   !!            3.3  !  2010-09  (C. Ethe) TRA-TRC merge: add ts, gtsu,
10   !gtsv 4D arrays
11   !!            3.7  !  2014-01  (G. Madec) suppression of curl and
12   !before hdiv from in-core memory
13   !!----------------------------------------------------------------------
14   USE par_oce        ! ocean parameters
15   USE lib_mpp        ! MPP library
16#if defined key_si3
17   USE ice, ONLY : jpl, nlay_i, nlay_s
18#endif
19   IMPLICIT NONE
20   PRIVATE
21
22   PUBLIC scice_alloc ! routine called by nemo_init in nemogcm.F90
23
24#if defined key_si3
25   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:,:,:) :: scr1i, scr2i, scr3i, scr4i, scr5i, scr6i  ! scratch arrays SI3
26   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:,:)   :: scr1ai, scr2ai
27   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:)     :: scr1D1i, scr1D2i, scr1D3i, scr1D4i, &
28                                                            scr1D5i, scr1D6i, scr1D7i, scr1D8i, &
29                                                            scr1D9i, scr1D10i, scr1D11i, scr1D12i, &
30                                                            scr1D13i
31   INTEGER,  PUBLIC, ALLOCATABLE,       DIMENSION(:)     :: iscr1D1i
32
33   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   ztiold      ! Old temperature in the ice
34   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   ztsold      ! Old temperature in the snow
35   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   ztib        ! Temporary temperature in the ice to check the convergence
36   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   ztsb        ! Temporary temperature in the snow to check the convergence
37   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   ztcond_i    ! Ice thermal conductivity
38   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zradtr_i    ! Radiation transmitted through the ice
39   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zradab_i    ! Radiation absorbed in the ice
40   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zkappa_i    ! Kappa factor in the ice
41   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zeta_i      ! Eta factor in the ice
42   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zradtr_s    ! Radiation transmited through the snow
43   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zradab_s    ! Radiation absorbed in the snow
44   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zkappa_s    ! Kappa factor in the snow
45   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zeta_s      ! Eta factor in the snow
46   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zindterm    ! 'Ind'ependent term
47   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zindtbis    ! Temporary 'ind'ependent term
48   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :)     ::   zdiagbis    ! Temporary 'dia'gonal term
49   REAL(wp), PUBLIC, ALLOCATABLE,       DIMENSION(:, :, :)  ::   ztrid       ! Tridiagonal system terms
50#endif
51
52CONTAINS
53
54   INTEGER FUNCTION scice_alloc()
55      !!----------------------------------------------------------------------
56      !!                   ***  FUNCTION oce_alloc  ***
57      !!----------------------------------------------------------------------
58      INTEGER :: ierr(2)
59      !!----------------------------------------------------------------------
60      !
61      ierr(:) = 0
62#if defined key_si3
63      ALLOCATE(scr1i(jpi,jpj, jpl), scr2i(jpi,jpj, jpl), scr1D1i(jpij), scr1D2i(jpij), &
64               scr1D3i(jpij), scr1D4i(jpij),  scr1D5i(jpij), scr1D6i(jpij),            &
65               scr1D7i(jpij), scr1D8i(jpij),  scr1D9i(jpij), scr1D10i(jpij),           &
66               scr1D11i(jpij), scr1D12i(jpij), scr1D13i(jpij), iscr1D1i(jpij),         &
67               scr1ai(jpij,jpl), scr2ai(jpij,jpl), scr3i(jpi,jpj, jpl),                &
68               scr4i(jpi,jpj, jpl), scr5i(jpi,jpj, jpl), scr6i(jpi,jpj, jpl), STAT=ierr(1))
69      ALLOCATE(ztiold(jpij,nlay_i), ztsold(jpij,nlay_s), ztib(jpij,nlay_i), ztsb(jpij,nlay_s), &
70               ztcond_i(jpij,0:nlay_i), zradtr_i(jpij,0:nlay_i), zradab_i(jpij,0:nlay_i), &
71               zkappa_i(jpij,0:nlay_i), zeta_i(jpij,0:nlay_i), zradtr_s(jpij,0:nlay_s),   &
72               zradab_s(jpij,0:nlay_s), zkappa_s(jpij,0:nlay_s), zeta_s(jpij,0:nlay_s),   &
73               zindterm(jpij,nlay_i+3), zindtbis(jpij,nlay_i+3), zdiagbis(jpij,nlay_i+3), &
74               ztrid(jpij,nlay_i+3,3),  STAT=ierr(2))
75#endif
76      !
77      scice_alloc = MAXVAL( ierr )
78      IF( lk_mpp    )   CALL mpp_sum( scice_alloc )
79      IF( scice_alloc /= 0 )   CALL ctl_stop( 'STOP', 'sice_alloc: unable to allocate scratch ice arrays' )
80#if defined key_si3
81      scr1i(:, :, :) = 0.
82      scr2i(:,:, :)  = 0.
83      scr3i(:, :, :) = 0.
84      scr4i(:,:, :)  = 0.
85      scr1D1i(:)     = 0.
86      scr1D2i(:)     = 0.
87      scr1D3i(:)     = 0.
88      scr1D4i(:)     = 0.
89      scr1D5i(:)     = 0.
90      scr1D6i(:)     = 0.
91      scr1D7i(:)     = 0.
92      scr1D8i(:)     = 0.
93      scr1D9i(:)     = 0.
94      scr1D10i(:)    = 0.
95      scr1D11i(:)    = 0.
96      scr1D12i(:)    = 0.
97      scr1D13i(:)    = 0.
98      iscr1D1i(:)    = 0
99      scr1ai(:, :)   = 0.
100      scr2ai(:, :)   = 0.
101#endif 
102      !
103   END FUNCTION scice_alloc
104
105   !!======================================================================
106END MODULE scice 
Note: See TracBrowser for help on using the repository browser.