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.
cpl_rnf.F90 in branches/UKMO/dev_r5518_new_runoff_coupling/NEMOGCM/NEMO/OPA_SRC/SBC – NEMO

source: branches/UKMO/dev_r5518_new_runoff_coupling/NEMOGCM/NEMO/OPA_SRC/SBC/cpl_rnf.F90 @ 9158

Last change on this file since 9158 was 9158, checked in by dancopsey, 6 years ago

Add code to calculate river outflow areas.

File size: 4.9 KB
Line 
1MODULE cpl_rnf
2   !!======================================================================
3   !!                       ***  MODULE  sbcrnf  ***
4   !! Ocean forcing:  river runoff
5   !!=====================================================================
6   !! History : ?.?  ! 2018-01 (D. Copsey) Initial setup
7   !!----------------------------------------------------------------------
8
9   !!----------------------------------------------------------------------
10   !!   cpl_rnf_init : runoffs initialisation
11   !!----------------------------------------------------------------------
12
13   USE timing          ! Timing
14   USE in_out_manager  ! I/O units
15   USE iom
16   USE wrk_nemo        ! Memory allocation
17   USE dom_oce         ! Domain sizes (for grid box area e1e2t)
18   USE cpl_oasis3      ! Coupling information (for n_rivers)
19   
20   IMPLICIT NONE
21   PRIVATE
22   
23   PUBLIC   cpl_rnf_init     ! routine called in nemo_init
24   
25   TYPE, PUBLIC ::   RIVERS_DATA     !: Storage for river outflow data
26      INTEGER, POINTER, DIMENSION(:,:)    ::   river_number       !: River outflow number
27      REAL, POINTER, DIMENSION(:)         ::   river_area         ! 1D array listing areas of each river outflow (m2)
28   END TYPE RIVERS_DATA
29   
30   TYPE(RIVERS_DATA), PUBLIC, TARGET :: rivers  !: River data
31   
32CONTAINS
33
34   SUBROUTINE cpl_rnf_init
35      !!----------------------------------------------------------------------
36      !!                    ***  SUBROUTINE cpl_rnf_init  ***
37      !!                     
38      !! ** Purpose : - Read in file for river outflow numbers
39      !!               
40      !!
41      !!----------------------------------------------------------------------
42      !! namelist variables
43      !!-------------------
44      CHARACTER(len=80)                         ::   file_riv_number             !: Filename for river numbers
45      INTEGER                                   ::   ios                 ! Local integer output status for namelist read
46      INTEGER                                   ::   inum
47      INTEGER                                   ::   ii, jj              !: Loop indices
48      INTEGER                                   ::   max_river
49      REAL(wp), POINTER, DIMENSION(:,:)         ::   river_number        ! 2D array containing the river outflow numbers
50     
51      NAMELIST/nam_cpl_rnf/file_riv_number
52      !!----------------------------------------------------------------------
53
54      IF( nn_timing == 1 ) CALL timing_start('cpl_rnf_init')
55     
56      IF(lwp) WRITE(numout,*)
57      IF(lwp) WRITE(numout,*) 'cpl_rnf_init : initialization of river runoff coupling'
58      IF(lwp) WRITE(numout,*) '~~~~~~~~~~~~'
59     
60      REWIND(numnam_cfg)
61     
62      ! Read the namelist
63      READ  ( numnam_ref, nam_cpl_rnf, IOSTAT = ios, ERR = 901)
64901   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_cpl_rnf in reference namelist', lwp )
65      READ  ( numnam_cfg, nam_cpl_rnf, IOSTAT = ios, ERR = 902 )
66902   IF( ios /= 0 ) CALL ctl_nam ( ios , 'nam_cpl_rnf in configuration namelist', lwp )
67      IF(lwm) WRITE ( numond, nam_cpl_rnf )
68
69      !                                               ! Parameter control and print
70      IF(lwp) WRITE(numout,*) '  '
71      IF(lwp) WRITE(numout,*) '          Namelist nam_cpl_rnf : Coupled runoff'
72      IF(lwp) WRITE(numout,*) '             Input file that contains river numbers = ',file_riv_number
73      IF(lwp) WRITE(numout,*) ' '
74     
75      ! Assign space for river numbers
76      ALLOCATE( rivers%river_number( jpi, jpj ) )
77      CALL wrk_alloc( jpi, jpj, river_number )
78     
79      ! Read the river numbers from netcdf file
80      CALL iom_open (file_riv_number , inum )
81      CALL iom_get  ( inum, jpdom_data, 'river_number', river_number )
82      CALL iom_close( inum )
83     
84      ! Convert from a real array to an integer array
85      max_river=0
86      DO ii = 1, jpi
87        DO jj = 1, jpj
88          rivers%river_number(ii,jj) = INT(river_number(ii,jj))
89         
90          IF ( rivers%river_number(ii,jj) > max_river ) THEN
91            max_river = rivers%river_number(ii,jj)
92          END IF
93        END DO
94      END DO
95     
96      ! Print out the largest river number
97      WRITE(numout,*) 'Maximum river number = ',max_river
98     
99      ! Get the area of each river outflow
100      ALLOCATE( rivers%river_area( n_rivers ) )
101      rivers%river_area(:) = 0.0
102      DO ii = 1, jpi
103        DO jj = 1, jpj
104          IF ( rivers%river_number(ii,jj) > 0 .AND. rivers%river_number(ii,jj) <= n_rivers ) THEN
105            rivers%river_area(rivers%river_number(ii,jj)) = rivers%river_area(rivers%river_number(ii,jj)) + e1e2t(ii,jj)
106          END IF
107        END IF
108      END IF
109     
110      ! Use mpp_sum to add together river areas on other processors
111      CALL mpp_sum( rivers%river_area )
112      WRITE(numout,*) 'Area of river number 1 is ',rivers%river_area(1)
113      WRITE(numout,*) 'Area of river number 10 is ',rivers%river_area(10)
114     
115     
116   END SUBROUTINE cpl_rnf_init
117
118END MODULE cpl_rnf
Note: See TracBrowser for help on using the repository browser.