1 |
jmc |
1.1 |
C $Header: /u/gcmpack/MITgcm/pkg/atm_ocn_coupler/cpl_send_ocn_atmconfig.F,v 1.3 2006/06/15 23:29:17 jmc Exp $ |
2 |
|
|
C $Name: $ |
3 |
|
|
|
4 |
|
|
#include "CPP_OPTIONS.h" |
5 |
|
|
|
6 |
|
|
CBOP 0 |
7 |
|
|
C !ROUTINE: CPL_CHECK_CPLCONFIG |
8 |
|
|
|
9 |
|
|
C !INTERFACE: |
10 |
|
|
SUBROUTINE CPL_CHECK_CPLCONFIG( |
11 |
|
|
I msgUnit, |
12 |
|
|
U errFlag, errMsg ) |
13 |
|
|
|
14 |
|
|
C !DESCRIPTION: |
15 |
|
|
C *==========================================================* |
16 |
|
|
C | SUBROUTINE CPL_CHECK_CPLCONFIG |
17 |
|
|
C | o Routine to check Coupler config |
18 |
|
|
C *==========================================================* |
19 |
|
|
C | This routine also set the number of coupler time-step |
20 |
|
|
C | to run |
21 |
|
|
C *==========================================================* |
22 |
|
|
|
23 |
|
|
C !USES: |
24 |
|
|
IMPLICIT NONE |
25 |
|
|
C == Global variables == |
26 |
|
|
#include "ATMSIZE.h" |
27 |
|
|
#include "OCNSIZE.h" |
28 |
|
|
#include "ATMVARS.h" |
29 |
|
|
#include "OCNVARS.h" |
30 |
|
|
#include "CPL_PARAMS.h" |
31 |
|
|
#include "CPL_MAP2GRIDS.h" |
32 |
|
|
|
33 |
|
|
C !INPUT/OUTPUT PARAMETERS: |
34 |
|
|
C msgUnit :: log-file I/O unit |
35 |
|
|
C errFlag :: logical flag to report an error |
36 |
|
|
C errMsg :: error message to print |
37 |
|
|
INTEGER msgUnit |
38 |
|
|
LOGICAL errFlag |
39 |
|
|
CHARACTER*(*) errMsg |
40 |
|
|
|
41 |
|
|
C !LOCAL VARIABLES: |
42 |
|
|
INTEGER i, j, n |
43 |
|
|
INTEGER ijo, ija |
44 |
|
|
LOGICAL tmpVar(Nx_atm,Ny_atm) |
45 |
|
|
CEOP |
46 |
|
|
|
47 |
|
|
C-- Define length of the run (number of coupler time-step) |
48 |
|
|
WRITE(msgUnit,'(2A,I9)') ' CPL_CHECK_CPLCONFIG: ', |
49 |
|
|
& 'Nb of time-steps to run (ATM) =', nSteps_atm |
50 |
|
|
WRITE(msgUnit,'(2A,I9)') ' CPL_CHECK_CPLCONFIG: ', |
51 |
|
|
& 'Nb of time-steps to run (OCN) =', nSteps_ocn |
52 |
|
|
IF ( nSteps_atm .EQ. nSteps_ocn ) THEN |
53 |
|
|
nCouplingSteps = nSteps_ocn |
54 |
|
|
WRITE(msgUnit,'(2A,I9)') ' CPL_CHECK_CPLCONFIG: ', |
55 |
|
|
& 'Nb of time-steps to run (CPL) =', nCouplingSteps |
56 |
|
|
ELSE |
57 |
|
|
errFlag = .TRUE. |
58 |
|
|
nCouplingSteps = 0 |
59 |
|
|
WRITE(msgUnit,'(2A)') ' *** ERROR *** CPL_CHECK_CPLCONFIG: ', |
60 |
|
|
& ' wrong Nb of time-steps to run' |
61 |
|
|
ENDIF |
62 |
|
|
|
63 |
|
|
C-- Check for consistent RunOff mapping regarding Land/Sea mask: |
64 |
|
|
DO j=1,Ny_atm |
65 |
|
|
DO i=1,Nx_atm |
66 |
|
|
tmpVar(i,j) = landMask_atm(i,j) .EQ. 1. _d 0 |
67 |
|
|
ENDDO |
68 |
|
|
ENDDO |
69 |
|
|
DO n=1,nROmap |
70 |
|
|
C a) check that RunOff drain a land point |
71 |
|
|
ija = ijROatm(n) - 1 |
72 |
|
|
i = 1 + MOD(ija,Nx_atm) |
73 |
|
|
j = 1 + ija/Nx_atm |
74 |
|
|
IF ( landMask_atm(i,j).EQ.0. ) THEN |
75 |
|
|
errFlag = .TRUE. |
76 |
|
|
WRITE(msgUnit,'(A,2I8,A)') |
77 |
|
|
& ' *** ERROR *** RunOff Mapp: i,j=', i, j, ' not Land point' |
78 |
|
|
ENDIF |
79 |
|
|
tmpVar(i,j) = .FALSE. |
80 |
|
|
C b) and supply an ocean point |
81 |
|
|
ijo = ijROocn(n) - 1 |
82 |
|
|
i = 1 + MOD(ijo,Nx_ocn) |
83 |
|
|
j = 1 + ijo/Nx_ocn |
84 |
|
|
IF ( OcMxlD_ocn(i,j).EQ.0. ) THEN |
85 |
|
|
errFlag = .TRUE. |
86 |
|
|
WRITE(msgUnit,'(A,2I8,A)') |
87 |
|
|
& ' *** ERROR *** RunOff Mapp: i,j=', i, j, ' not Oce point' |
88 |
|
|
ENDIF |
89 |
|
|
ENDDO |
90 |
|
|
C c) check that all land-points are drained, |
91 |
|
|
C note: would need to know ATM grid-cell area to check that |
92 |
|
|
C RunOff Mapping conserve water. |
93 |
|
|
DO j=1,Ny_atm |
94 |
|
|
DO i=1,Nx_atm |
95 |
|
|
IF ( tmpVar(i,j) ) THEN |
96 |
|
|
WRITE(msgUnit,'(A,2I8,A)') |
97 |
|
|
& ' ** WARNING ** Land point: i,j=', i, j, ' not drained' |
98 |
|
|
ENDIF |
99 |
|
|
ENDDO |
100 |
|
|
ENDDO |
101 |
|
|
|
102 |
|
|
IF ( errFlag ) THEN |
103 |
|
|
errMsg = 'in CPL_CHECK_CPLCONFIG' |
104 |
|
|
ELSE |
105 |
|
|
WRITE(msgUnit,'(2A)') ' CPL_CHECK_CPLCONFIG: ','done' |
106 |
|
|
ENDIF |
107 |
|
|
|
108 |
|
|
RETURN |
109 |
|
|
END |