- Timestamp:
- 2020-09-14T17:40:34+02:00 (4 years ago)
- Location:
- NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev @HEADext/AGRIF5 ^/vendors/AGRIF/dev_r12970_AGRIF_CMEMS ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@13382 sette
-
- Property svn:externals
-
NEMO/branches/2019/dev_r11351_fldread_with_XIOS/src/OCE/SBC/cpl_oasis3.F90
r10582 r13463 69 69 INTEGER, PUBLIC, PARAMETER :: nmaxcat=5 ! Maximum number of coupling fields 70 70 INTEGER, PUBLIC, PARAMETER :: nmaxcpl=5 ! Maximum number of coupling fields 71 LOGICAL, PARAMETER :: ltmp_wapatch = .TRUE. ! patch to restore wraparound rows in cpl_send, cpl_rcv, cpl_define72 INTEGER :: nldi_save, nlei_save73 INTEGER :: nldj_save, nlej_save74 71 75 72 TYPE, PUBLIC :: FLD_CPL !: Type for coupling field information … … 114 111 !------------------------------------------------------------------ 115 112 CALL oasis_init_comp ( ncomp_id, TRIM(cd_modname), nerror ) 116 IF 113 IF( nerror /= OASIS_Ok ) & 117 114 CALL oasis_abort (ncomp_id, 'cpl_init', 'Failure in oasis_init_comp') 118 115 … … 122 119 123 120 CALL oasis_get_localcomm ( kl_comm, nerror ) 124 IF 121 IF( nerror /= OASIS_Ok ) & 125 122 CALL oasis_abort (ncomp_id, 'cpl_init','Failure in oasis_get_localcomm' ) 126 123 ! … … 148 145 !!-------------------------------------------------------------------- 149 146 150 ! patch to restore wraparound rows in cpl_send, cpl_rcv, cpl_define151 IF ( ltmp_wapatch ) THEN152 nldi_save = nldi ; nlei_save = nlei153 nldj_save = nldj ; nlej_save = nlej154 IF( nimpp == 1 ) nldi = 1155 IF( nimpp + jpi - 1 == jpiglo ) nlei = jpi156 IF( njmpp == 1 ) nldj = 1157 IF( njmpp + jpj - 1 == jpjglo ) nlej = jpj158 ENDIF159 147 IF(lwp) WRITE(numout,*) 160 148 IF(lwp) WRITE(numout,*) 'cpl_define : initialization in coupled ocean/atmosphere case' … … 177 165 ENDIF 178 166 ! 179 ! ... Define the shape for the area that excludes the halo 180 ! For serial configuration (key_mpp_mpi not being active) 181 ! nl* is set to the global values 1 and jp*glo. 167 ! ... Define the shape for the area that excludes the halo as we don't want them to be "seen" by oasis 182 168 ! 183 169 ishape(1) = 1 184 ishape(2) = nlei-nldi+1170 ishape(2) = Ni_0 185 171 ishape(3) = 1 186 ishape(4) = nlej-nldj+1172 ishape(4) = Nj_0 187 173 ! 188 174 ! ... Allocate memory for data exchange 189 175 ! 190 ALLOCATE(exfld( nlei-nldi+1, nlej-nldj+1), stat = nerror)176 ALLOCATE(exfld(Ni_0, Nj_0), stat = nerror) ! allocate only inner domain (without halos) 191 177 IF( nerror > 0 ) THEN 192 178 CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in allocating exfld') ; RETURN … … 194 180 ! 195 181 ! ----------------------------------------------------------------- 196 ! ... Define the partition 182 ! ... Define the partition, excluding halos as we don't want them to be "seen" by oasis 197 183 ! ----------------------------------------------------------------- 198 184 199 paral(1) = 2 200 paral(2) = jpiglo * (nldj-1+njmpp-1) + (nldi-1+nimpp-1) ! NEMO lower left corner global offset201 paral(3) = nlei-nldi+1 ! local extent in i202 paral(4) = nlej-nldj+1 ! local extent in j203 paral(5) = jpiglo ! global extent in x185 paral(1) = 2 ! box partitioning 186 paral(2) = Ni0glo * mjg0(nn_hls) + mig0(nn_hls) ! NEMO lower left corner global offset, without halos 187 paral(3) = Ni_0 ! local extent in i, excluding halos 188 paral(4) = Nj_0 ! local extent in j, excluding halos 189 paral(5) = Ni0glo ! global extent in x, excluding halos 204 190 205 IF( ln_ctl) THEN191 IF( sn_cfctl%l_oasout ) THEN 206 192 WRITE(numout,*) ' multiexchg: paral (1:5)', paral 207 WRITE(numout,*) ' multiexchg: jpi, jpj =', jpi, jpj208 WRITE(numout,*) ' multiexchg: nldi, nlei, nimpp =', nldi, nlei, nimpp209 WRITE(numout,*) ' multiexchg: nldj, nlej, njmpp =', nldj, nlej, njmpp193 WRITE(numout,*) ' multiexchg: Ni_0, Nj_0 =', Ni_0, Nj_0 194 WRITE(numout,*) ' multiexchg: Nis0, Nie0, nimpp =', Nis0, Nie0, nimpp 195 WRITE(numout,*) ' multiexchg: Njs0, Nje0, njmpp =', Njs0, Nje0, njmpp 210 196 ENDIF 211 197 212 CALL oasis_def_partition ( id_part, paral, nerror, jpiglo*jpjglo )198 CALL oasis_def_partition ( id_part, paral, nerror, Ni0glo*Nj0glo ) ! global number of points, excluding halos 213 199 ! 214 200 ! ... Announce send variables. … … 217 203 ! 218 204 DO ji = 1, ksnd 219 IF 205 IF( ssnd(ji)%laction ) THEN 220 206 221 207 IF( ssnd(ji)%nct > nmaxcat ) THEN … … 228 214 DO jm = 1, kcplmodel 229 215 230 IF 216 IF( ssnd(ji)%nct .GT. 1 ) THEN 231 217 WRITE(cli2,'(i2.2)') jc 232 218 zclname = TRIM(ssnd(ji)%clname)//'_cat'//cli2 … … 234 220 zclname = ssnd(ji)%clname 235 221 ENDIF 236 IF 222 IF( kcplmodel > 1 ) THEN 237 223 WRITE(cli2,'(i2.2)') jm 238 224 zclname = 'model'//cli2//'_'//TRIM(zclname) … … 241 227 IF( agrif_fixed() /= 0 ) THEN 242 228 zclname=TRIM(Agrif_CFixed())//'_'//TRIM(zclname) 243 END 244 #endif 245 IF( ln_ctl) WRITE(numout,*) "Define", ji, jc, jm, " "//TRIM(zclname), " for ", OASIS_Out229 ENDIF 230 #endif 231 IF( sn_cfctl%l_oasout ) WRITE(numout,*) "Define", ji, jc, jm, " "//TRIM(zclname), " for ", OASIS_Out 246 232 CALL oasis_def_var (ssnd(ji)%nid(jc,jm), zclname, id_part , (/ 2, 1 /), & 247 233 & OASIS_Out , ishape , OASIS_REAL, nerror ) 248 IF 234 IF( nerror /= OASIS_Ok ) THEN 249 235 WRITE(numout,*) 'Failed to define transient ', ji, jc, jm, " "//TRIM(zclname) 250 236 CALL oasis_abort ( ssnd(ji)%nid(jc,jm), 'cpl_define', 'Failure in oasis_def_var' ) 251 237 ENDIF 252 IF( ln_ctl.AND. ssnd(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple"253 IF( ln_ctl.AND. ssnd(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple"238 IF( sn_cfctl%l_oasout .AND. ssnd(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple" 239 IF( sn_cfctl%l_oasout .AND. ssnd(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple" 254 240 END DO 255 241 END DO … … 262 248 ! 263 249 DO ji = 1, krcv 264 IF 250 IF( srcv(ji)%laction ) THEN 265 251 266 252 IF( srcv(ji)%nct > nmaxcat ) THEN … … 273 259 DO jm = 1, kcplmodel 274 260 275 IF 261 IF( srcv(ji)%nct .GT. 1 ) THEN 276 262 WRITE(cli2,'(i2.2)') jc 277 263 zclname = TRIM(srcv(ji)%clname)//'_cat'//cli2 … … 279 265 zclname = srcv(ji)%clname 280 266 ENDIF 281 IF 267 IF( kcplmodel > 1 ) THEN 282 268 WRITE(cli2,'(i2.2)') jm 283 269 zclname = 'model'//cli2//'_'//TRIM(zclname) … … 286 272 IF( agrif_fixed() /= 0 ) THEN 287 273 zclname=TRIM(Agrif_CFixed())//'_'//TRIM(zclname) 288 END 289 #endif 290 IF( ln_ctl) WRITE(numout,*) "Define", ji, jc, jm, " "//TRIM(zclname), " for ", OASIS_In274 ENDIF 275 #endif 276 IF( sn_cfctl%l_oasout ) WRITE(numout,*) "Define", ji, jc, jm, " "//TRIM(zclname), " for ", OASIS_In 291 277 CALL oasis_def_var (srcv(ji)%nid(jc,jm), zclname, id_part , (/ 2, 1 /), & 292 278 & OASIS_In , ishape , OASIS_REAL, nerror ) 293 IF 279 IF( nerror /= OASIS_Ok ) THEN 294 280 WRITE(numout,*) 'Failed to define transient ', ji, jc, jm, " "//TRIM(zclname) 295 281 CALL oasis_abort ( srcv(ji)%nid(jc,jm), 'cpl_define', 'Failure in oasis_def_var' ) 296 282 ENDIF 297 IF( ln_ctl.AND. srcv(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple"298 IF( ln_ctl.AND. srcv(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple"283 IF( sn_cfctl%l_oasout .AND. srcv(ji)%nid(jc,jm) /= -1 ) WRITE(numout,*) "variable defined in the namcouple" 284 IF( sn_cfctl%l_oasout .AND. srcv(ji)%nid(jc,jm) == -1 ) WRITE(numout,*) "variable NOT defined in the namcouple" 299 285 300 286 END DO … … 306 292 ! End of definition phase 307 293 !------------------------------------------------------------------ 308 294 ! 295 #if defined key_agrif 296 IF( agrif_fixed() == Agrif_Nb_Fine_Grids() ) THEN 297 #endif 309 298 CALL oasis_enddef(nerror) 310 299 IF( nerror /= OASIS_Ok ) CALL oasis_abort ( ncomp_id, 'cpl_define', 'Failure in oasis_enddef') 311 ! 312 IF ( ltmp_wapatch ) THEN 313 nldi = nldi_save ; nlei = nlei_save 314 nldj = nldj_save ; nlej = nlej_save 315 ENDIF 300 #if defined key_agrif 301 ENDIF 302 #endif 303 ! 316 304 END SUBROUTINE cpl_define 317 305 … … 331 319 INTEGER :: jc,jm ! local loop index 332 320 !!-------------------------------------------------------------------- 333 ! patch to restore wraparound rows in cpl_send, cpl_rcv, cpl_define334 IF ( ltmp_wapatch ) THEN335 nldi_save = nldi ; nlei_save = nlei336 nldj_save = nldj ; nlej_save = nlej337 IF( nimpp == 1 ) nldi = 1338 IF( nimpp + jpi - 1 == jpiglo ) nlei = jpi339 IF( njmpp == 1 ) nldj = 1340 IF( njmpp + jpj - 1 == jpjglo ) nlej = jpj341 ENDIF342 321 ! 343 322 ! snd data to OASIS3 … … 346 325 DO jm = 1, ssnd(kid)%ncplmodel 347 326 348 IF( ssnd(kid)%nid(jc,jm) /= -1 ) THEN 349 CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, pdata( nldi:nlei, nldj:nlej,jc), kinfo )327 IF( ssnd(kid)%nid(jc,jm) /= -1 ) THEN ! exclude halos from data sent to oasis 328 CALL oasis_put ( ssnd(kid)%nid(jc,jm), kstep, pdata(Nis0:Nie0, Njs0:Nje0,jc), kinfo ) 350 329 351 IF ( ln_ctl) THEN330 IF ( sn_cfctl%l_oasout ) THEN 352 331 IF ( kinfo == OASIS_Sent .OR. kinfo == OASIS_ToRest .OR. & 353 332 & kinfo == OASIS_SentOut .OR. kinfo == OASIS_ToRestOut ) THEN … … 357 336 WRITE(numout,*) 'oasis_put: kstep ', kstep 358 337 WRITE(numout,*) 'oasis_put: info ', kinfo 359 WRITE(numout,*) ' - Minimum value is ', MINVAL(pdata( :,:,jc))360 WRITE(numout,*) ' - Maximum value is ', MAXVAL(pdata( :,:,jc))361 WRITE(numout,*) ' - Sum value is ', SUM(pdata(:,:,jc))338 WRITE(numout,*) ' - Minimum value is ', MINVAL(pdata(Nis0:Nie0,Njs0:Nje0,jc)) 339 WRITE(numout,*) ' - Maximum value is ', MAXVAL(pdata(Nis0:Nie0,Njs0:Nje0,jc)) 340 WRITE(numout,*) ' - Sum value is ', SUM(pdata(Nis0:Nie0,Njs0:Nje0,jc)) 362 341 WRITE(numout,*) '****************' 363 342 ENDIF … … 368 347 ENDDO 369 348 ENDDO 370 IF ( ltmp_wapatch ) THEN371 nldi = nldi_save ; nlei = nlei_save372 nldj = nldj_save ; nlej = nlej_save373 ENDIF374 349 ! 375 350 END SUBROUTINE cpl_snd … … 390 365 !! 391 366 INTEGER :: jc,jm ! local loop index 392 LOGICAL :: llaction, ll fisrt367 LOGICAL :: llaction, ll_1st 393 368 !!-------------------------------------------------------------------- 394 ! patch to restore wraparound rows in cpl_send, cpl_rcv, cpl_define395 IF ( ltmp_wapatch ) THEN396 nldi_save = nldi ; nlei_save = nlei397 nldj_save = nldj ; nlej_save = nlej398 ENDIF399 369 ! 400 370 ! receive local data from OASIS3 on every process … … 403 373 ! 404 374 DO jc = 1, srcv(kid)%nct 405 IF ( ltmp_wapatch ) THEN 406 IF( nimpp == 1 ) nldi = 1 407 IF( nimpp + jpi - 1 == jpiglo ) nlei = jpi 408 IF( njmpp == 1 ) nldj = 1 409 IF( njmpp + jpj - 1 == jpjglo ) nlej = jpj 410 ENDIF 411 llfisrt = .TRUE. 375 ll_1st = .TRUE. 412 376 413 377 DO jm = 1, srcv(kid)%ncplmodel … … 420 384 & kinfo == OASIS_RecvOut .OR. kinfo == OASIS_FromRestOut 421 385 422 IF ( ln_ctl ) WRITE(numout,*) "llaction, kinfo, kstep, ivarid: " , llaction, kinfo, kstep, srcv(kid)%nid(jc,jm) 386 IF ( sn_cfctl%l_oasout ) & 387 & WRITE(numout,*) "llaction, kinfo, kstep, ivarid: " , llaction, kinfo, kstep, srcv(kid)%nid(jc,jm) 423 388 424 IF ( llaction ) THEN389 IF( llaction ) THEN ! data received from oasis do not include halos 425 390 426 391 kinfo = OASIS_Rcv 427 IF( ll fisrt ) THEN428 pdata( nldi:nlei,nldj:nlej,jc) = exfld(:,:) * pmask(nldi:nlei,nldj:nlej,jm)429 ll fisrt = .FALSE.392 IF( ll_1st ) THEN 393 pdata(Nis0:Nie0,Njs0:Nje0,jc) = exfld(:,:) * pmask(Nis0:Nie0,Njs0:Nje0,jm) 394 ll_1st = .FALSE. 430 395 ELSE 431 pdata(nldi:nlei,nldj:nlej,jc) = pdata(nldi:nlei,nldj:nlej,jc) + exfld(:,:) * pmask(nldi:nlei,nldj:nlej,jm) 396 pdata(Nis0:Nie0,Njs0:Nje0,jc) = pdata(Nis0:Nie0,Njs0:Nje0,jc) & 397 & + exfld(:,:) * pmask(Nis0:Nie0,Njs0:Nje0,jm) 432 398 ENDIF 433 399 434 IF ( ln_ctl) THEN400 IF ( sn_cfctl%l_oasout ) THEN 435 401 WRITE(numout,*) '****************' 436 402 WRITE(numout,*) 'oasis_get: Incoming ', srcv(kid)%clname … … 438 404 WRITE(numout,*) 'oasis_get: kstep', kstep 439 405 WRITE(numout,*) 'oasis_get: info ', kinfo 440 WRITE(numout,*) ' - Minimum value is ', MINVAL(pdata( :,:,jc))441 WRITE(numout,*) ' - Maximum value is ', MAXVAL(pdata( :,:,jc))442 WRITE(numout,*) ' - Sum value is ', SUM(pdata(:,:,jc))406 WRITE(numout,*) ' - Minimum value is ', MINVAL(pdata(Nis0:Nie0,Njs0:Nje0,jc)) 407 WRITE(numout,*) ' - Maximum value is ', MAXVAL(pdata(Nis0:Nie0,Njs0:Nje0,jc)) 408 WRITE(numout,*) ' - Sum value is ', SUM(pdata(Nis0:Nie0,Njs0:Nje0,jc)) 443 409 WRITE(numout,*) '****************' 444 410 ENDIF … … 450 416 ENDDO 451 417 452 IF ( ltmp_wapatch ) THEN 453 nldi = nldi_save ; nlei = nlei_save 454 nldj = nldj_save ; nlej = nlej_save 455 ENDIF 456 !--- Fill the overlap areas and extra hallows (mpp) 457 !--- check periodicity conditions (all cases) 458 IF( .not. llfisrt ) THEN 418 !--- we must call lbc_lnk to fill the halos that where not received. 419 IF( .NOT. ll_1st ) THEN 459 420 CALL lbc_lnk( 'cpl_oasis3', pdata(:,:,jc), srcv(kid)%clgrid, srcv(kid)%nsgn ) 460 421 ENDIF … … 483 444 ! 484 445 DO ji = 1, nsnd 485 IF 446 IF(ssnd(ji)%laction ) THEN 486 447 DO jm = 1, ncplmodel 487 448 IF( ssnd(ji)%nid(1,jm) /= -1 ) THEN … … 495 456 ENDDO 496 457 DO ji = 1, nrcv 497 IF 458 IF(srcv(ji)%laction ) THEN 498 459 DO jm = 1, ncplmodel 499 460 IF( srcv(ji)%nid(1,jm) /= -1 ) THEN … … 529 490 ! 530 491 DEALLOCATE( exfld ) 531 IF 492 IF(nstop == 0) THEN 532 493 CALL oasis_terminate( nerror ) 533 494 ELSE
Note: See TracChangeset
for help on using the changeset viewer.