Changeset 3465 for LMDZ6/trunk/libf/phylmd/cpl_mod.F90
- Timestamp:
- Mar 14, 2019, 10:34:31 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/cpl_mod.F90
r3448 r3465 97 97 !$OMP THREADPRIVATE(cpl_atm_co22D) 98 98 99 !!!!!!!!!! variable for calving 100 INTEGER, PARAMETER :: nb_zone_calving = 3 101 REAL,ALLOCATABLE, DIMENSION(:,:,:),SAVE :: area_calving 102 !$OMP THREADPRIVATE(area_calving) 103 REAL,ALLOCATABLE, DIMENSION(:,:),SAVE :: cell_area2D 104 !$OMP THREADPRIVATE(cell_area2D) 105 INTEGER, SAVE :: ind_calving(nb_zone_calving) 106 !$OMP THREADPRIVATE(ind_calving) 107 108 LOGICAL,SAVE :: cpl_old_calving 109 !$OMP THREADPRIVATE(cpl_old_calving) 110 99 111 CONTAINS 100 112 ! … … 105 117 USE surface_data 106 118 USE indice_sol_mod 107 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat, grid1dTo2d_glo 119 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat, grid1dTo2d_glo, klon_glo, grid_type, unstructured, regular_lonlat 108 120 USE time_phylmdz_mod, ONLY: annee_ref, day_ini, itau_phy, itaufin_phy 109 121 USE print_control_mod, ONLY: lunout 122 USE geometry_mod, ONLY : longitude_deg, latitude_deg, ind_cell_glo, cell_area 123 USE ioipsl_getin_p_mod, ONLY: getin_p 110 124 111 125 ! Input arguments … … 127 141 CHARACTER(len = 80) :: abort_message 128 142 CHARACTER(len=80) :: clintocplnam, clfromcplnam 143 REAL, DIMENSION(klon_mpi) :: rlon_mpi, rlat_mpi, cell_area_mpi 144 INTEGER, DIMENSION(klon_mpi) :: ind_cell_glo_mpi 145 REAL, DIMENSION(nbp_lon,jj_nb) :: lon2D, lat2D 146 INTEGER :: mask_calving(nbp_lon,jj_nb,nb_zone_calving) 147 REAL :: pos 148 149 !*************************************** 150 ! Use old calving or not (default no) 151 cpl_old_calving=.FALSE. 152 CALL getin_p("cpl_old_calving",cpl_old_calving) 153 129 154 130 155 !************************************************************************************* … … 208 233 ENDIF 209 234 235 ! calving initialization 236 ALLOCATE(area_calving(nbp_lon, jj_nb, nb_zone_calving), stat = error) 237 sum_error = sum_error + error 238 ALLOCATE(cell_area2D(nbp_lon, jj_nb), stat = error) 239 sum_error = sum_error + error 240 241 242 CALL gather_omp(longitude_deg,rlon_mpi) 243 CALL gather_omp(latitude_deg,rlat_mpi) 244 CALL gather_omp(ind_cell_glo,ind_cell_glo_mpi) 245 CALL gather_omp(cell_area,cell_area_mpi) 246 247 IF (is_omp_master) THEN 248 CALL Grid1DTo2D_mpi(rlon_mpi,lon2D) 249 CALL Grid1DTo2D_mpi(rlat_mpi,lat2D) 250 CALL Grid1DTo2D_mpi(cell_area_mpi,cell_area2D) 251 mask_calving(:,:,:) = 0 252 WHERE ( lat2D >= 40) mask_calving(:,:,1) = 1 253 WHERE ( lat2D < 40 .AND. lat2D > -50) mask_calving(:,:,2) = 1 254 WHERE ( lat2D <= -50) mask_calving(:,:,3) = 1 255 256 257 DO i=1,nb_zone_calving 258 area_calving(:,:,i)=mask_calving(:,:,i)*cell_area2D(:,:) 259 pos=1 260 IF (i>1) pos = 1 + ((nbp_lon*nbp_lat-1)*(i-1))/(nb_zone_calving-1) 261 262 ind_calving(i)=0 263 IF (grid_type==unstructured) THEN 264 265 DO ig=1,klon_mpi 266 IF (ind_cell_glo_mpi(ig)==pos) ind_calving(i)=ig 267 ENDDO 268 269 ELSE IF (grid_type==regular_lonlat) THEN 270 IF ((ij_begin<=pos .AND. ij_end>=pos) .OR. (ij_begin<=pos .AND. is_south_pole_dyn )) THEN 271 ind_calving(i)=pos-(jj_begin-1)*nbp_lon 272 ENDIF 273 ENDIF 274 275 ENDDO 276 ENDIF 277 278 210 279 IF (sum_error /= 0) THEN 211 280 abort_message='Pb allocation variables couplees' … … 1086 1155 ! Local variables 1087 1156 !************************************************************************************* 1088 INTEGER :: error, sum_error, j1157 INTEGER :: error, sum_error, i,j,k 1089 1158 INTEGER :: itau_w 1090 1159 INTEGER :: time_sec … … 1103 1172 ! Table with all fields to send to coupler 1104 1173 REAL, DIMENSION(nbp_lon, jj_nb, maxsend) :: tab_flds 1105 REAL, DIMENSION(klon_mpi) :: rlon_mpi, rlat_mpi 1106 1174 REAL, DIMENSION(klon_mpi) :: rlon_mpi, rlat_mpi 1175 REAL :: calving(nb_zone_calving) 1176 REAL :: calving_glo(nb_zone_calving) 1177 1107 1178 #ifdef CPP_MPI 1108 1179 INCLUDE 'mpif.h' … … 1131 1202 1132 1203 IF (version_ocean=='nemo') THEN 1133 tab_flds(:,:,ids_liqrun) = cpl_rriv2D(:,:) + cpl_rcoa2D(:,:)1204 tab_flds(:,:,ids_liqrun) = (cpl_rriv2D(:,:) + cpl_rcoa2D(:,:)) 1134 1205 IF (carbon_cycle_cpl) tab_flds(:,:,ids_atmco2)=cpl_atm_co22D(:,:) 1135 1206 ELSE IF (version_ocean=='opa8') THEN … … 1158 1229 !************************************************************************************* 1159 1230 IF (is_omp_root) THEN 1231 1232 IF (cpl_old_calving) THEN ! use old calving 1160 1233 1161 1234 DO j = 1, jj_nb … … 1190 1263 ENDIF 1191 1264 ENDIF 1265 tab_flds(:,:,ids_calvin) = tmp_calv(:,:) 1266 1267 ENDIF 1268 1269 DO k=1,nb_zone_calving 1270 calving(k)=0 1271 DO j = 1, jj_nb 1272 calving(k)= calving(k)+DOT_PRODUCT(cpl_rlic2D(:,j)*area_calving(:,j,k),pctsrf2D(:,j,is_lic)) 1273 ENDDO 1274 ENDDO 1192 1275 1193 tab_flds(:,:,ids_calvin) = tmp_calv(:,:) 1276 CALL MPI_ALLREDUCE(calving, calving_glo, nb_zone_calving, MPI_REAL_LMDZ, MPI_SUM, COMM_LMDZ_PHY, error) 1277 1278 tab_flds(:,:,ids_calvin) = 0 1279 DO k=1,nb_zone_calving 1280 IF (ind_calving(k)>0 ) THEN 1281 j=(ind_calving(k)-1)/nbp_lon + 1 1282 i=MOD(ind_calving(k)-1,nbp_lon)+1 1283 tab_flds(i,j,ids_calvin) = calving_glo(k) 1284 ENDIF 1285 ENDDO 1194 1286 1195 1287 !*************************************************************************************
Note: See TracChangeset
for help on using the changeset viewer.