Changeset 2715 for trunk/NEMOGCM/NEMO/OPA_SRC/IOM
- Timestamp:
- 2011-03-30T17:58:35+02:00 (13 years ago)
- Location:
- trunk/NEMOGCM/NEMO/OPA_SRC/IOM
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEMOGCM/NEMO/OPA_SRC/IOM/in_out_manager.F90
r2528 r2715 12 12 !!---------------------------------------------------------------------- 13 13 14 !!----------------------------------------------------------------------15 !! ctl_stop : update momentum and tracer Kz from a tke scheme16 !! ctl_warn : initialization, namelist read, and parameters control17 !! getunit : give the index of an unused logical unit18 14 !!---------------------------------------------------------------------- 19 15 USE par_oce ! ocean parameter … … 134 130 !! $Id$ 135 131 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 136 !!----------------------------------------------------------------------137 CONTAINS138 139 SUBROUTINE ctl_stop( cd1, cd2, cd3, cd4, cd5, &140 & cd6, cd7, cd8, cd9, cd10 )141 !!----------------------------------------------------------------------142 !! *** ROUTINE stop_opa ***143 !!144 !! ** Purpose : print in ocean.outpput file a error message and145 !! increment the error number (nstop) by one.146 !!----------------------------------------------------------------------147 CHARACTER(len=*), INTENT(in), OPTIONAL :: cd1, cd2, cd3, cd4, cd5148 CHARACTER(len=*), INTENT(in), OPTIONAL :: cd6, cd7, cd8, cd9, cd10149 !!----------------------------------------------------------------------150 !151 nstop = nstop + 1152 IF(lwp) THEN153 WRITE(numout,cform_err)154 IF( PRESENT(cd1 ) ) WRITE(numout,*) cd1155 IF( PRESENT(cd2 ) ) WRITE(numout,*) cd2156 IF( PRESENT(cd3 ) ) WRITE(numout,*) cd3157 IF( PRESENT(cd4 ) ) WRITE(numout,*) cd4158 IF( PRESENT(cd5 ) ) WRITE(numout,*) cd5159 IF( PRESENT(cd6 ) ) WRITE(numout,*) cd6160 IF( PRESENT(cd7 ) ) WRITE(numout,*) cd7161 IF( PRESENT(cd8 ) ) WRITE(numout,*) cd8162 IF( PRESENT(cd9 ) ) WRITE(numout,*) cd9163 IF( PRESENT(cd10) ) WRITE(numout,*) cd10164 ENDIF165 CALL FLUSH(numout )166 IF( numstp /= -1 ) CALL FLUSH(numstp )167 IF( numsol /= -1 ) CALL FLUSH(numsol )168 IF( numevo_ice /= -1 ) CALL FLUSH(numevo_ice)169 !170 END SUBROUTINE ctl_stop171 172 173 SUBROUTINE ctl_warn( cd1, cd2, cd3, cd4, cd5, &174 & cd6, cd7, cd8, cd9, cd10 )175 !!----------------------------------------------------------------------176 !! *** ROUTINE stop_warn ***177 !!178 !! ** Purpose : print in ocean.outpput file a error message and179 !! increment the warning number (nwarn) by one.180 !!----------------------------------------------------------------------181 CHARACTER(len=*), INTENT(in), OPTIONAL :: cd1, cd2, cd3, cd4, cd5182 CHARACTER(len=*), INTENT(in), OPTIONAL :: cd6, cd7, cd8, cd9, cd10183 !!----------------------------------------------------------------------184 !185 nwarn = nwarn + 1186 IF(lwp) THEN187 WRITE(numout,cform_war)188 IF( PRESENT(cd1 ) ) WRITE(numout,*) cd1189 IF( PRESENT(cd2 ) ) WRITE(numout,*) cd2190 IF( PRESENT(cd3 ) ) WRITE(numout,*) cd3191 IF( PRESENT(cd4 ) ) WRITE(numout,*) cd4192 IF( PRESENT(cd5 ) ) WRITE(numout,*) cd5193 IF( PRESENT(cd6 ) ) WRITE(numout,*) cd6194 IF( PRESENT(cd7 ) ) WRITE(numout,*) cd7195 IF( PRESENT(cd8 ) ) WRITE(numout,*) cd8196 IF( PRESENT(cd9 ) ) WRITE(numout,*) cd9197 IF( PRESENT(cd10) ) WRITE(numout,*) cd10198 ENDIF199 CALL FLUSH(numout)200 !201 END SUBROUTINE ctl_warn202 203 204 SUBROUTINE ctl_opn( knum, cdfile, cdstat, cdform, cdacce, klengh, kout, ldwp, karea )205 !!----------------------------------------------------------------------206 !! *** ROUTINE ctl_opn ***207 !!208 !! ** Purpose : Open file and check if required file is available.209 !!210 !! ** Method : Fortan open211 !!----------------------------------------------------------------------212 INTEGER , INTENT( out) :: knum ! logical unit to open213 CHARACTER(len=*) , INTENT(in ) :: cdfile ! file name to open214 CHARACTER(len=*) , INTENT(in ) :: cdstat ! disposition specifier215 CHARACTER(len=*) , INTENT(in ) :: cdform ! formatting specifier216 CHARACTER(len=*) , INTENT(in ) :: cdacce ! access specifier217 INTEGER , INTENT(in ) :: klengh ! record length218 INTEGER , INTENT(in ) :: kout ! number of logical units for write219 LOGICAL , INTENT(in ) :: ldwp ! boolean term for print220 INTEGER, OPTIONAL, INTENT(in ) :: karea ! proc number221 !!222 CHARACTER(len=80) :: clfile223 INTEGER :: iost224 !!----------------------------------------------------------------------225 226 ! adapt filename227 ! ----------------228 clfile = TRIM(cdfile)229 IF( PRESENT( karea ) ) THEN230 IF( karea > 1 ) WRITE(clfile, "(a,'_',i4.4)") TRIM(clfile), karea-1231 ENDIF232 #if defined key_agrif233 IF( .NOT. Agrif_Root() ) clfile = TRIM(Agrif_CFixed())//'_'//TRIM(clfile)234 knum=Agrif_Get_Unit()235 #else236 knum=getunit()237 #endif238 239 iost=0240 IF( cdacce(1:6) == 'DIRECT' ) THEN241 OPEN( UNIT=knum, FILE=clfile, FORM=cdform, ACCESS=cdacce, STATUS=cdstat, RECL=klengh, ERR=100, IOSTAT=iost )242 ELSE243 OPEN( UNIT=knum, FILE=clfile, FORM=cdform, ACCESS=cdacce, STATUS=cdstat , ERR=100, IOSTAT=iost )244 ENDIF245 IF( iost == 0 ) THEN246 IF(ldwp) THEN247 WRITE(kout,*) ' file : ', clfile,' open ok'248 WRITE(kout,*) ' unit = ', knum249 WRITE(kout,*) ' status = ', cdstat250 WRITE(kout,*) ' form = ', cdform251 WRITE(kout,*) ' access = ', cdacce252 WRITE(kout,*)253 ENDIF254 ENDIF255 100 CONTINUE256 IF( iost /= 0 ) THEN257 IF(ldwp) THEN258 WRITE(kout,*)259 WRITE(kout,*) ' ===>>>> : bad opening file: ', clfile260 WRITE(kout,*) ' ======= === '261 WRITE(kout,*) ' unit = ', knum262 WRITE(kout,*) ' status = ', cdstat263 WRITE(kout,*) ' form = ', cdform264 WRITE(kout,*) ' access = ', cdacce265 WRITE(kout,*) ' iostat = ', iost266 WRITE(kout,*) ' we stop. verify the file '267 WRITE(kout,*)268 ENDIF269 STOP 'ctl_opn bad opening'270 ENDIF271 272 END SUBROUTINE ctl_opn273 274 275 FUNCTION getunit()276 !!----------------------------------------------------------------------277 !! *** FUNCTION getunit ***278 !!279 !! ** Purpose : return the index of an unused logical unit280 !!----------------------------------------------------------------------281 INTEGER :: getunit282 LOGICAL :: llopn283 !!----------------------------------------------------------------------284 !285 getunit = 15 ! choose a unit that is big enough then it is not already used in NEMO286 llopn = .TRUE.287 DO WHILE( (getunit < 998) .AND. llopn )288 getunit = getunit + 1289 INQUIRE( unit = getunit, opened = llopn )290 END DO291 IF( (getunit == 999) .AND. llopn ) THEN292 CALL ctl_stop( 'getunit: All logical units until 999 are used...' )293 getunit = -1294 ENDIF295 !296 END FUNCTION getunit297 298 132 !!===================================================================== 299 133 END MODULE in_out_manager -
trunk/NEMOGCM/NEMO/OPA_SRC/IOM/iom.F90
r2586 r2715 18 18 !! iom_rstput : write a field in a restart file (interfaced to several routines) 19 19 !!-------------------------------------------------------------------- 20 USE in_out_manager ! I/O manager21 20 USE dom_oce ! ocean space and time domain 22 21 USE lbclnk ! lateal boundary condition / mpp exchanges … … 25 24 USE iom_nf90 ! NetCDF format with native NetCDF library 26 25 USE iom_rstdimg ! restarts access direct format "dimg" style... 27 26 USE in_out_manager ! I/O manager 27 USE lib_mpp ! MPP library 28 28 #if defined key_iomput 29 29 USE sbc_oce, ONLY : nn_fsbc ! ocean space and time domain … … 887 887 INTEGER , INTENT(in) :: kiomid ! Identifier of the file 888 888 CHARACTER(len=*), INTENT(in) :: cdvar ! time axis name 889 REAL(wp) , INTENT(in), DIMENSION( jpk) :: pvar ! written field889 REAL(wp) , INTENT(in), DIMENSION( :) :: pvar ! written field 890 890 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 891 891 INTEGER :: ivid ! variable id … … 909 909 INTEGER , INTENT(in) :: kiomid ! Identifier of the file 910 910 CHARACTER(len=*), INTENT(in) :: cdvar ! time axis name 911 REAL(wp) , INTENT(in), DIMENSION( jpi,jpj) :: pvar ! written field911 REAL(wp) , INTENT(in), DIMENSION(:, : ) :: pvar ! written field 912 912 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 913 913 INTEGER :: ivid ! variable id … … 931 931 INTEGER , INTENT(in) :: kiomid ! Identifier of the file 932 932 CHARACTER(len=*), INTENT(in) :: cdvar ! time axis name 933 REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) :: pvar ! written field933 REAL(wp) , INTENT(in), DIMENSION(:,:,:) :: pvar ! written field 934 934 INTEGER , INTENT(in), OPTIONAL :: ktype ! variable external type 935 935 INTEGER :: ivid ! variable id … … 964 964 SUBROUTINE iom_p2d( cdname, pfield2d ) 965 965 CHARACTER(LEN=*) , INTENT(in) :: cdname 966 REAL(wp), DIMENSION(jpi,jpj), INTENT(in) :: pfield2d966 REAL(wp), DIMENSION(:,:), INTENT(in) :: pfield2d 967 967 #if defined key_iomput 968 968 CALL event__write_field2D( cdname, pfield2d(nldi:nlei, nldj:nlej) ) … … 974 974 SUBROUTINE iom_p3d( cdname, pfield3d ) 975 975 CHARACTER(LEN=*) , INTENT(in) :: cdname 976 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(in) :: pfield3d976 REAL(wp), DIMENSION(:,:,:), INTENT(in) :: pfield3d 977 977 #if defined key_iomput 978 978 CALL event__write_field3D( cdname, pfield3d(nldi:nlei, nldj:nlej, :) ) -
trunk/NEMOGCM/NEMO/OPA_SRC/IOM/iom_ioipsl.F90
r2528 r2715 18 18 !! iom_rstput : write a field in a restart file (interfaced to several routines) 19 19 !!-------------------------------------------------------------------- 20 USE in_out_manager ! I/O manager21 20 USE dom_oce ! ocean space and time domain 22 21 USE iom_def ! iom variables definitions 23 22 USE ioipsl ! IOIPSL library 23 USE in_out_manager ! I/O manager 24 USE lib_mpp ! MPP library 24 25 25 26 IMPLICIT NONE -
trunk/NEMOGCM/NEMO/OPA_SRC/IOM/iom_nf90.F90
r2528 r2715 18 18 !! iom_rstput : write a field in a restart file (interfaced to several routines) 19 19 !!-------------------------------------------------------------------- 20 USE in_out_manager ! I/O manager21 20 USE dom_oce ! ocean space and time domain 22 21 USE lbclnk ! lateal boundary condition / mpp exchanges 23 22 USE iom_def ! iom variables definitions 24 23 USE netcdf ! NetCDF library 24 USE in_out_manager ! I/O manager 25 USE lib_mpp ! MPP library 25 26 26 27 IMPLICIT NONE -
trunk/NEMOGCM/NEMO/OPA_SRC/IOM/iom_rstdimg.F90
r2528 r2715 16 16 !!-------------------------------------------------------------------- 17 17 USE in_out_manager ! I/O manager 18 USE lib_mpp ! MPP library 18 19 USE dom_oce ! ocean space and time domain 19 20 USE lbclnk ! lateal boundary condition / mpp exchanges … … 82 83 llclobber = ldwrt .AND. ln_clobber 83 84 ! get a free unit 84 idrst = get unit() ! get a free logical unit for the restart file85 idrst = get_unit() ! get a free logical unit for the restart file 85 86 !!$#if defined key_agrif 86 87 !!$ idrst = Agrif_Get_Unit() … … 418 419 CHARACTER(len=*) , INTENT(in) :: cdvar ! time axis name 419 420 INTEGER , INTENT(in) :: kvid ! variable id 420 REAL(wp), DIMENSION( jpk), INTENT(in), OPTIONAL :: pv_r1d ! written 1d field421 REAL(wp), DIMENSION( jpi,jpj), INTENT(in), OPTIONAL :: pv_r2d ! written 2d field422 REAL(wp), DIMENSION( jpi,jpj,jpk), INTENT(in), OPTIONAL :: pv_r3d ! written 3d field421 REAL(wp), DIMENSION( :), INTENT(in), OPTIONAL :: pv_r1d ! written 1d field 422 REAL(wp), DIMENSION(: ,: ), INTENT(in), OPTIONAL :: pv_r2d ! written 2d field 423 REAL(wp), DIMENSION(: ,: ,: ), INTENT(in), OPTIONAL :: pv_r3d ! written 3d field 423 424 ! 424 425 CHARACTER(LEN=100) :: clinfo ! info character -
trunk/NEMOGCM/NEMO/OPA_SRC/IOM/prtctl.F90
r2528 r2715 1 1 MODULE prtctl 2 !!====================================================================== ========2 !!====================================================================== 3 3 !! *** MODULE prtctl *** 4 !! Ocean system : print all SUM trends for each processor domain 5 !!============================================================================== 4 !! Ocean system : print all SUM trends for each processor domain 5 !!====================================================================== 6 !! History : 9.0 ! 05-07 (C. Talandier) original code 7 !!---------------------------------------------------------------------- 6 8 USE dom_oce ! ocean space and time domain variables 7 9 USE in_out_manager ! I/O manager … … 11 13 PRIVATE 12 14 13 !! * Module declaration 14 INTEGER, DIMENSION(:), ALLOCATABLE :: numid 15 INTEGER, DIMENSION(:), ALLOCATABLE, SAVE :: & !: 16 nlditl , nldjtl , & !: first, last indoor index for each i-domain 17 nleitl , nlejtl , & !: first, last indoor index for each j-domain 18 nimpptl, njmpptl, & !: i-, j-indexes for each processor 19 nlcitl , nlcjtl , & !: dimensions of every subdomain 20 ibonitl, ibonjtl 21 22 REAL(wp), DIMENSION(:), ALLOCATABLE :: & !: 23 t_ctll , s_ctll , & !: previous trend values 24 u_ctll , v_ctll 25 26 INTEGER :: ktime !: time step 27 28 !! * Routine accessibility 15 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: numid 16 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: nlditl , nldjtl ! first, last indoor index for each i-domain 17 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: nleitl , nlejtl ! first, last indoor index for each j-domain 18 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: nimpptl, njmpptl ! i-, j-indexes for each processor 19 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: nlcitl , nlcjtl ! dimensions of every subdomain 20 INTEGER , DIMENSION(:), ALLOCATABLE, SAVE :: ibonitl, ibonjtl ! 21 22 REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE :: t_ctll , s_ctll ! previous tracer trend values 23 REAL(wp), DIMENSION(:), ALLOCATABLE, SAVE :: u_ctll , v_ctll ! previous velocity trend values 24 25 INTEGER :: ktime ! time step 26 29 27 PUBLIC prt_ctl ! called by all subroutines 30 28 PUBLIC prt_ctl_info ! called by all subroutines 31 29 PUBLIC prt_ctl_init ! called by opa.F90 30 32 31 !!---------------------------------------------------------------------- 33 32 !! NEMO/OPA 3.3 , NEMO Consortium (2010) 34 33 !! $Id$ 35 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt)34 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) 36 35 !!---------------------------------------------------------------------- 37 38 39 36 CONTAINS 40 37 41 SUBROUTINE prt_ctl (tab2d_1, tab3d_1, mask1, clinfo1, tab2d_2, tab3d_2, mask2, clinfo2, ovlap, kdim, clinfo3) 38 SUBROUTINE prt_ctl (tab2d_1, tab3d_1, mask1, clinfo1, tab2d_2, tab3d_2, & 39 & mask2, clinfo2, ovlap, kdim, clinfo3 ) 42 40 !!---------------------------------------------------------------------- 43 41 !! *** ROUTINE prt_ctl *** … … 74 72 !! kdim : k- direction for 3D arrays 75 73 !! clinfo3 : additional information 76 !! 77 !! History : 78 !! 9.0 ! 05-07 (C. Talandier) original code 79 !!---------------------------------------------------------------------- 80 !! * Arguments 81 REAL(wp), DIMENSION(:,:) , INTENT(in), OPTIONAL :: tab2d_1 82 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_1 83 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask1 84 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo1 85 REAL(wp), DIMENSION(:,:) , INTENT(in), OPTIONAL :: tab2d_2 86 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_2 87 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask2 88 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo2 89 INTEGER , INTENT(in), OPTIONAL :: ovlap 90 INTEGER , INTENT(in), OPTIONAL :: kdim 91 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo3 92 93 !! * Local declarations 94 INTEGER :: overlap, jn, sind, eind, kdir,j_id 74 !!---------------------------------------------------------------------- 75 USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 76 USE wrk_nemo, ONLY: ztab2d_1 => wrk_2d_30 , ztab2d_2 => wrk_2d_31 77 USE wrk_nemo, ONLY: zmask1 => wrk_3d_11 , zmask2 => wrk_3d_12 78 USE wrk_nemo, ONLY: ztab3d_1 => wrk_3d_13 , ztab3d_2 => wrk_3d_14 79 ! 80 REAL(wp), DIMENSION(:,:) , INTENT(in), OPTIONAL :: tab2d_1 81 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_1 82 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask1 83 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo1 84 REAL(wp), DIMENSION(:,:) , INTENT(in), OPTIONAL :: tab2d_2 85 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: tab3d_2 86 REAL(wp), DIMENSION(:,:,:), INTENT(in), OPTIONAL :: mask2 87 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo2 88 INTEGER , INTENT(in), OPTIONAL :: ovlap 89 INTEGER , INTENT(in), OPTIONAL :: kdim 90 CHARACTER (len=*) , INTENT(in), OPTIONAL :: clinfo3 91 ! 95 92 CHARACTER (len=15) :: cl2 93 INTEGER :: overlap, jn, sind, eind, kdir,j_id 96 94 REAL(wp) :: zsum1, zsum2, zvctl1, zvctl2 97 REAL(wp), DIMENSION(jpi,jpj) :: ztab2d_1, ztab2d_2 98 REAL(wp), DIMENSION(jpi,jpj,jpk) :: zmask1, zmask2, ztab3d_1, ztab3d_2 99 !!---------------------------------------------------------------------- 95 !!---------------------------------------------------------------------- 96 97 IF( wrk_in_use(2, 30,31) .OR. wrk_in_use(3, 11,12,13,14) ) THEN 98 CALL ctl_stop('prt_ctl : requested workspace arrays unavailable') ; RETURN 99 ENDIF 100 100 101 101 ! Arrays, scalars initialization … … 115 115 116 116 ! Control of optional arguments 117 IF( PRESENT(clinfo2) ) cl2 = clinfo2 118 IF( PRESENT(ovlap) ) overlap = ovlap 119 IF( PRESENT(kdim) ) kdir = kdim 120 IF( PRESENT(tab2d_1) ) ztab2d_1(:,:) = tab2d_1(:,:) 121 IF( PRESENT(tab2d_2) ) ztab2d_2(:,:) = tab2d_2(:,:) 122 IF( PRESENT(tab3d_1) ) ztab3d_1(:,:,1:kdir)= tab3d_1(:,:,:) 123 IF( PRESENT(tab3d_2) ) ztab3d_2(:,:,1:kdir)= tab3d_2(:,:,:) 124 IF( PRESENT(mask1) ) zmask1 (:,:,:)= mask1 (:,:,:) 125 IF( PRESENT(mask2) ) zmask2 (:,:,:)= mask2 (:,:,:) 126 127 IF( lk_mpp ) THEN 128 ! processor number 117 IF( PRESENT(clinfo2) ) cl2 = clinfo2 118 IF( PRESENT(ovlap) ) overlap = ovlap 119 IF( PRESENT(kdim) ) kdir = kdim 120 IF( PRESENT(tab2d_1) ) ztab2d_1(:,:) = tab2d_1(:,:) 121 IF( PRESENT(tab2d_2) ) ztab2d_2(:,:) = tab2d_2(:,:) 122 IF( PRESENT(tab3d_1) ) ztab3d_1(:,:,1:kdir) = tab3d_1(:,:,:) 123 IF( PRESENT(tab3d_2) ) ztab3d_2(:,:,1:kdir) = tab3d_2(:,:,:) 124 IF( PRESENT(mask1) ) zmask1 (:,:,:) = mask1 (:,:,:) 125 IF( PRESENT(mask2) ) zmask2 (:,:,:) = mask2 (:,:,:) 126 127 IF( lk_mpp ) THEN ! processor number 129 128 sind = narea 130 129 eind = narea 131 ELSE 132 ! processors total number 130 ELSE ! processors total number 133 131 sind = 1 134 132 eind = ijsplt … … 206 204 ENDDO 207 205 206 IF( wrk_not_released(2, 30,31) .OR. & 207 wrk_not_released(3, 11,12,13,14) ) CALL ctl_stop('prt_ctl: failed to release workspace arrays') 208 ! 208 209 END SUBROUTINE prt_ctl 209 210 … … 220 221 !! clinfo2 : information about the ivar2 221 222 !! ivar2 : value to print 222 !! 223 !! History : 224 !! 9.0 ! 05-07 (C. Talandier) original code 225 !!---------------------------------------------------------------------- 226 !! * Arguments 227 CHARACTER (len=*), INTENT(in) :: clinfo1 223 !!---------------------------------------------------------------------- 224 CHARACTER (len=*), INTENT(in) :: clinfo1 228 225 INTEGER , INTENT(in), OPTIONAL :: ivar1 229 226 CHARACTER (len=*), INTENT(in), OPTIONAL :: clinfo2 230 227 INTEGER , INTENT(in), OPTIONAL :: ivar2 231 228 INTEGER , INTENT(in), OPTIONAL :: itime 232 233 !! * Local declarations 229 ! 234 230 INTEGER :: jn, sind, eind, iltime, j_id 235 231 !!---------------------------------------------------------------------- 236 232 237 IF( lk_mpp ) THEN 238 ! processor number 233 IF( lk_mpp ) THEN ! processor number 239 234 sind = narea 240 235 eind = narea 241 ELSE 242 ! total number of processors 236 ELSE ! total number of processors 243 237 sind = 1 244 238 eind = ijsplt … … 257 251 ! Loop over each sub-domain, i.e. number of processors ijsplt 258 252 DO jn = sind, eind 259 260 ! Set logical unit 261 j_id = numid(jn - narea + 1) 262 253 ! 254 j_id = numid(jn - narea + 1) ! Set logical unit 255 ! 263 256 IF( PRESENT(ivar1) .AND. PRESENT(clinfo2) .AND. PRESENT(ivar2) ) THEN 264 257 WRITE(j_id,*)clinfo1, ivar1, clinfo2, ivar2 … … 272 265 WRITE(j_id,*)clinfo1 273 266 ENDIF 274 275 END DO276 277 278 END SUBROUTINE prt_ctl_info 267 ! 268 END DO 269 ! 270 END SUBROUTINE prt_ctl_info 271 279 272 280 273 SUBROUTINE prt_ctl_init … … 283 276 !! 284 277 !! ** Purpose : open ASCII files & compute indices 285 !! 286 !! History : 287 !! 9.0 ! 05-07 (C. Talandier) original code 288 !!---------------------------------------------------------------------- 289 !! * Local declarations 278 !!---------------------------------------------------------------------- 290 279 INTEGER :: jn, sind, eind, j_id 291 280 CHARACTER (len=28) :: clfile_out … … 295 284 296 285 ! Allocate arrays 297 ALLOCATE(nlditl (ijsplt)) 298 ALLOCATE(nldjtl (ijsplt)) 299 ALLOCATE(nleitl (ijsplt)) 300 ALLOCATE(nlejtl (ijsplt)) 301 ALLOCATE(nimpptl(ijsplt)) 302 ALLOCATE(njmpptl(ijsplt)) 303 ALLOCATE(nlcitl (ijsplt)) 304 ALLOCATE(nlcjtl (ijsplt)) 305 ALLOCATE(t_ctll (ijsplt)) 306 ALLOCATE(s_ctll (ijsplt)) 307 ALLOCATE(u_ctll (ijsplt)) 308 ALLOCATE(v_ctll (ijsplt)) 309 ALLOCATE(ibonitl(ijsplt)) 310 ALLOCATE(ibonjtl(ijsplt)) 286 ALLOCATE( nlditl(ijsplt) , nleitl(ijsplt) , nimpptl(ijsplt) , ibonitl(ijsplt) , & 287 & nldjtl(ijsplt) , nlejtl(ijsplt) , njmpptl(ijsplt) , ibonjtl(ijsplt) , & 288 & nlcitl(ijsplt) , t_ctll(ijsplt) , u_ctll (ijsplt) , & 289 & nlcjtl(ijsplt) , s_ctll(ijsplt) , v_ctll (ijsplt) ) 311 290 312 291 ! Initialization 313 t_ctll(:) =0.e0314 s_ctll(:) =0.e0315 u_ctll(:) =0.e0316 v_ctll(:) =0.e0292 t_ctll(:) = 0.e0 293 s_ctll(:) = 0.e0 294 u_ctll(:) = 0.e0 295 v_ctll(:) = 0.e0 317 296 ktime = 1 318 297 … … 345 324 ENDIF 346 325 347 ALLOCATE( numid(eind-sind+1))326 ALLOCATE( numid(eind-sind+1) ) 348 327 349 328 DO jn = sind, eind … … 392 371 9003 FORMAT(a20,i4.4,a17,i4.4) 393 372 9004 FORMAT(a11,i4.4,a26,i4.4,a14) 394 END DO395 373 END DO 374 ! 396 375 END SUBROUTINE prt_ctl_init 397 376 … … 434 413 !! 8.5 ! 02-08 (G. Madec) F90 : free form 435 414 !!---------------------------------------------------------------------- 436 !! * Local variables437 415 INTEGER :: ji, jj, jn ! dummy loop indices 438 416 INTEGER :: & … … 443 421 nrecil, nrecjl, nldil, nleil, nldjl, nlejl 444 422 445 INTEGER, DIMENSION(:,:), ALLOCATABLE :: & 446 iimpptl, ijmpptl, ilcitl, ilcjtl ! temporary workspace 423 INTEGER, DIMENSION(:,:), ALLOCATABLE :: iimpptl, ijmpptl, ilcitl, ilcjtl ! workspace 447 424 REAL(wp) :: zidom, zjdom ! temporary scalars 448 425 !!---------------------------------------------------------------------- … … 564 541 nlejtl(jn) = nlejl 565 542 END DO 566 567 DEALLOCATE(iimpptl) 568 DEALLOCATE(ijmpptl) 569 DEALLOCATE(ilcitl) 570 DEALLOCATE(ilcjtl) 571 543 ! 544 DEALLOCATE( iimpptl, ijmpptl, ilcitl, ilcjtl ) 545 ! 572 546 END SUBROUTINE sub_dom 573 547 548 !!====================================================================== 574 549 END MODULE prtctl
Note: See TracChangeset
for help on using the changeset viewer.