Changeset 2073 for LMDZ5/branches/testing/libf/phylmd/limit_slab.F90
- Timestamp:
- Jun 25, 2014, 5:43:19 PM (10 years ago)
- Location:
- LMDZ5/branches/testing
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ5/branches/testing
- Property svn:mergeinfo changed
/LMDZ5/trunk merged: 2057-2059,2062,2064-2070
- Property svn:mergeinfo changed
-
LMDZ5/branches/testing/libf/phylmd/limit_slab.F90
r1910 r2073 1 1 ! $Header$ 2 2 3 SUBROUTINE limit_slab(itime, dtime, jour, lmt_bils, lmt_foce,diff_sst)3 SUBROUTINE limit_slab(itime, dtime, jour, lmt_bils, diff_sst) 4 4 5 5 USE dimphy … … 20 20 INTEGER, INTENT(IN) :: jour ! jour a lire dans l'annee 21 21 REAL , INTENT(IN) :: dtime ! pas de temps de la physique (en s) 22 REAL, DIMENSION(klon), INTENT(OUT) :: lmt_bils, lmt_foce,diff_sst22 REAL, DIMENSION(klon), INTENT(OUT) :: lmt_bils, diff_sst 23 23 24 24 ! Locals variables with attribute SAVE 25 25 !**************************************************************************************** 26 REAL, DIMENSION(:), ALLOCATABLE, SAVE :: bils_save, foce_save27 !$OMP THREADPRIVATE(bils_save, foce_save)26 REAL, DIMENSION(:), ALLOCATABLE, SAVE :: bils_save, diff_sst_save 27 !$OMP THREADPRIVATE(bils_save, diff_sst_save) 28 28 29 29 ! Locals variables … … 32 32 INTEGER :: nvarid, nid, ierr, i 33 33 INTEGER, DIMENSION(2) :: start, epais 34 REAL, DIMENSION(klon_glo):: bils_glo, foce_glo,sst_l_glo, sst_lp1_glo, diff_sst_glo34 REAL, DIMENSION(klon_glo):: bils_glo, sst_l_glo, sst_lp1_glo, diff_sst_glo 35 35 CHARACTER (len = 20) :: modname = 'limit_slab' 36 LOGICAL :: read_bils,read_sst 36 37 37 38 ! End declaration … … 41 42 lmt_pas = NINT(86400./dtime) 42 43 44 ! F. Codron 5/14: add defaults for bils, diff_sst (0) 43 45 IF (MOD(itime-1, lmt_pas) == 0) THEN ! time to read 44 46 !$OMP MASTER ! Only master thread 45 47 IF (is_mpi_root) THEN ! Only master processus 46 48 print*,'in limit_slab time to read, itime=',itime 49 read_bils=.TRUE. 50 read_sst=.TRUE. 47 51 48 52 ierr = NF90_OPEN ('limit_slab.nc', NF90_NOWRITE, nid) 49 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,& 50 'Pb in opening file limit_slab.nc',1) 53 IF (ierr /= NF90_NOERR) THEN 54 read_bils=.FALSE. 55 read_sst=.FALSE. 56 ELSE ! read file 51 57 52 58 ! La tranche de donnees a lire: … … 57 63 58 64 !**************************************************************************************** 59 ! 2) Read bils and ocean fraction65 ! 2) Read bils and SST tendency 60 66 ! 61 67 !**************************************************************************************** … … 63 69 ! Read bils_glo 64 70 ierr = NF90_INQ_VARID(nid, 'BILS_OCE', nvarid) 65 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,'The variable <BILS_OCE> is abstent',1) 66 67 ierr = NF90_GET_VAR(nid,nvarid,bils_glo,start,epais) 68 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,'Reading of <BILS_OCE> failed',1) 69 ! 70 ! Read foce_glo 71 ierr = NF90_INQ_VARID(nid, 'FOCE', nvarid) 72 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,'The variable <FOCE> is abstent',1) 73 74 ierr = NF90_GET_VAR(nid,nvarid,foce_glo,start,epais) 75 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,'Reading of <FOCE> failed',1) 76 ! 71 IF (ierr /= NF90_NOERR) THEN 72 read_bils=.FALSE. 73 ELSE 74 ierr = NF90_GET_VAR(nid,nvarid,bils_glo,start,epais) 75 IF (ierr /= NF90_NOERR) read_bils=.FALSE. 76 END IF 77 77 ! Read sst_glo for this day 78 78 ierr = NF90_INQ_VARID(nid, 'SST', nvarid) 79 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,'The variable <SST> is abstent',1)80 81 ierr = NF90_GET_VAR(nid,nvarid,sst_l_glo,start,epais)82 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,'Reading of <SST> failed',1)83 79 IF (ierr /= NF90_NOERR) THEN 80 read_sst=.FALSE. 81 ELSE 82 ierr = NF90_GET_VAR(nid,nvarid,sst_l_glo,start,epais) 83 IF (ierr /= NF90_NOERR) read_sst=.FALSE. 84 84 ! Read sst_glo for one day ahead 85 start(2) = jour + 1 86 IF (start(2) > 360) start(2)=1 87 ierr = NF90_GET_VAR(nid,nvarid,sst_lp1_glo,start,epais) 88 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,'Reading of <SST> day+1 failed',1) 89 90 ! Calculate difference in temperature between this day and one ahead 91 DO i=1, klon_glo-1 92 diff_sst_glo(i) = sst_lp1_glo(i) - sst_l_glo(i) 93 END DO 94 diff_sst_glo(klon_glo) = sst_lp1_glo(klon_glo) - sst_l_glo(1) 85 start(2) = jour + 1 86 IF (start(2) > 360) start(2)=1 87 ierr = NF90_GET_VAR(nid,nvarid,sst_lp1_glo,start,epais) 88 IF (ierr /= NF90_NOERR) read_sst=.FALSE. 89 END IF 95 90 96 91 !**************************************************************************************** 97 ! 5) Close file and distribu ate variables to all processus92 ! 5) Close file and distribute variables to all processus 98 93 ! 99 94 !**************************************************************************************** 100 95 ierr = NF90_CLOSE(nid) 101 96 IF (ierr /= NF90_NOERR) CALL abort_gcm(modname,'Pb when closing file', 1) 97 END IF ! Read File 98 IF (read_sst) THEN 99 ! Calculate difference in temperature between this day and one ahead 100 ! DO i=1, klon_glo-1 101 ! diff_sst_glo(i) = sst_lp1_glo(i) - sst_l_glo(i) 102 ! END DO 103 ! diff_sst_glo(klon_glo) = sst_lp1_glo(klon_glo) - sst_l_glo(1) 104 DO i=1, klon_glo 105 diff_sst_glo(i) = sst_lp1_glo(i) - sst_l_glo(i) 106 END DO 107 END IF !read_sst 102 108 ENDIF ! is_mpi_root 103 109 … … 105 111 106 112 IF (.NOT. ALLOCATED(bils_save)) THEN 107 ALLOCATE(bils_save(klon), foce_save(klon), stat=ierr)113 ALLOCATE(bils_save(klon), diff_sst_save(klon), stat=ierr) 108 114 IF (ierr /= 0) CALL abort_gcm('limit_slab', 'pb in allocation',1) 109 115 END IF 110 116 111 CALL Scatter(bils_glo, bils_save) 112 CALL Scatter(foce_glo, foce_save) 113 CALL Scatter(diff_sst_glo, diff_sst) 117 ! Giveddefault values if needed 118 IF (read_bils) THEN 119 CALL Scatter(bils_glo, bils_save) 120 ELSE 121 bils_save(:)=0. 122 END IF 123 IF (read_sst) THEN 124 CALL Scatter(diff_sst_glo, diff_sst_save) 125 ELSE 126 diff_sst_save(:)=0. 127 END IF 114 128 115 ELSE ! not time to read116 diff_sst(:) = 0.117 129 ENDIF ! time to read 118 130 119 131 lmt_bils(:) = bils_save(:) 120 lmt_foce(:) = foce_save(:)132 diff_sst(:) = diff_sst_save(:) 121 133 122 134 END SUBROUTINE limit_slab
Note: See TracChangeset
for help on using the changeset viewer.