1 | MODULE 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 | |
---|
52 | CONTAINS |
---|
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 | !!====================================================================== |
---|
106 | END MODULE scice |
---|