Changeset 9205
- Timestamp:
- 2018-01-10T15:50:38+01:00 (7 years ago)
- Location:
- branches/UKMO/dev_r5518_obs_oper_update_bgc3d/NEMOGCM/NEMO/OPA_SRC/OBS
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_obs_oper_update_bgc3d/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
r9202 r9205 227 227 LOGICAL :: ltype_night ! Local version of ln_sstnight (false for other variables) 228 228 229 REAL(wp), POINTER, DIMENSION(:,:) :: &230 & zglam1, & ! Model longitudes for profile variable 1231 & zglam2 ! Model longitudes for profile variable 2232 REAL(wp), POINTER, DIMENSION(:,:) :: &233 & zgphi1, & ! Model latitudes for profile variable 1234 & zgphi2 ! Model latitudes for profile variable 2235 229 REAL(wp), POINTER, DIMENSION(:,:,:) :: & 236 & zmask1, & ! Model land/sea mask associated with variable 1 237 & zmask2 ! Model land/sea mask associated with variable 2 230 & zglam ! Model longitudes for profile variables 231 REAL(wp), POINTER, DIMENSION(:,:,:) :: & 232 & zgphi ! Model latitudes for profile variables 233 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: & 234 & zmask ! Model land/sea mask associated with variables 238 235 239 236 … … 279 276 & nn_msshc, rn_mdtcorr, rn_mdtcutoff, & 280 277 & nn_profdavtypes 281 282 CALL wrk_alloc( jpi, jpj, zglam1 )283 CALL wrk_alloc( jpi, jpj, zglam2 )284 CALL wrk_alloc( jpi, jpj, zgphi1 )285 CALL wrk_alloc( jpi, jpj, zgphi2 )286 CALL wrk_alloc( jpi, jpj, jpk, zmask1 )287 CALL wrk_alloc( jpi, jpj, jpk, zmask2 )288 278 289 279 !----------------------------------------------------------------------- … … 699 689 nextrprof(jtype) = 1 700 690 ALLOCATE(llvar(nvarsprof(jtype))) 701 llvar(1) = ln_t3d 702 llvar(2) = ln_s3d 703 zglam1 = glamt 704 zgphi1 = gphit 705 zmask1 = tmask 706 zglam2 = glamt 707 zgphi2 = gphit 708 zmask2 = tmask 691 CALL wrk_alloc( jpi, jpj, nvarsprof(jtype), zglam ) 692 CALL wrk_alloc( jpi, jpj, nvarsprof(jtype), zgphi ) 693 CALL wrk_alloc( jpi, jpj, jpk, nvarsprof(jtype), zmask ) 694 llvar(1) = ln_t3d 695 llvar(2) = ln_s3d 696 zglam(:,:,1) = glamt(:,:) 697 zglam(:,:,2) = glamt(:,:) 698 zgphi(:,:,1) = gphit(:,:) 699 zgphi(:,:,2) = gphit(:,:) 700 zmask(:,:,:,1) = tmask(:,:,:) 701 zmask(:,:,:,2) = tmask(:,:,:) 709 702 ELSE IF ( TRIM(cobstypesprof(jtype)) == 'vel' ) THEN 710 703 nvarsprof(jtype) = 2 711 704 nextrprof(jtype) = 2 712 705 ALLOCATE(llvar(nvarsprof(jtype))) 713 llvar(1) = ln_vel3d 714 llvar(2) = ln_vel3d 715 zglam1 = glamu 716 zgphi1 = gphiu 717 zmask1 = umask 718 zglam2 = glamv 719 zgphi2 = gphiv 720 zmask2 = vmask 706 CALL wrk_alloc( jpi, jpj, nvarsprof(jtype), zglam ) 707 CALL wrk_alloc( jpi, jpj, nvarsprof(jtype), zgphi ) 708 CALL wrk_alloc( jpi, jpj, jpk, nvarsprof(jtype), zmask ) 709 llvar(1) = ln_vel3d 710 llvar(2) = ln_vel3d 711 zglam(:,:,1) = glamu(:,:) 712 zglam(:,:,2) = glamv(:,:) 713 zgphi(:,:,1) = gphiu(:,:) 714 zgphi(:,:,2) = gphiv(:,:) 715 zmask(:,:,:,1) = umask(:,:,:) 716 zmask(:,:,:,2) = vmask(:,:,:) 721 717 ELSE 722 718 nvarsprof(jtype) = 1 723 719 nextrprof(jtype) = 0 724 720 ALLOCATE(llvar(nvarsprof(jtype))) 725 llvar(1) = .TRUE.726 zglam1 = glamt727 zgphi1 = gphit728 zmask1 = tmask729 zglam 2 = glamt730 zgphi 2 = gphit731 zmask 2 = tmask721 CALL wrk_alloc( jpi, jpj, nvarsprof(jtype), zglam ) 722 CALL wrk_alloc( jpi, jpj, nvarsprof(jtype), zgphi ) 723 CALL wrk_alloc( jpi, jpj, jpk, nvarsprof(jtype), zmask ) 724 llvar(1) = .TRUE. 725 zglam(:,:,1) = glamt(:,:) 726 zgphi(:,:,1) = gphit(:,:) 727 zmask(:,:,:,1) = tmask(:,:,:) 732 728 ENDIF 733 729 … … 745 741 746 742 CALL obs_pre_prof( profdata(jtype), profdataqc(jtype), & 747 & llvar (1), llvar(2), &743 & llvar, & 748 744 & jpi, jpj, jpk, & 749 & zmask 1, zglam1, zgphi1, zmask2, zglam2, zgphi2, &745 & zmask, zglam, zgphi, & 750 746 & ln_nea, ln_bound_reject, & 751 747 & kdailyavtypes = nn_profdavtypes ) 752 748 753 749 ! Is allocating and deallocating repeatedly in a loop good practice? 754 DEALLOCATE(llvar) 750 DEALLOCATE( llvar ) 751 CALL wrk_dealloc( jpi, jpj, nvarsprof(jtype), zglam ) 752 CALL wrk_dealloc( jpi, jpj, nvarsprof(jtype), zgphi ) 753 CALL wrk_dealloc( jpi, jpj, jpk, nvarsprof(jtype), zmask ) 755 754 756 755 END DO … … 807 806 808 807 ENDIF 809 810 CALL wrk_dealloc( jpi, jpj, zglam1 )811 CALL wrk_dealloc( jpi, jpj, zglam2 )812 CALL wrk_dealloc( jpi, jpj, zgphi1 )813 CALL wrk_dealloc( jpi, jpj, zgphi2 )814 CALL wrk_dealloc( jpi, jpj, jpk, zmask1 )815 CALL wrk_dealloc( jpi, jpj, jpk, zmask2 )816 808 817 809 END SUBROUTINE dia_obs_init -
branches/UKMO/dev_r5518_obs_oper_update_bgc3d/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90
r9186 r9205 255 255 256 256 257 SUBROUTINE obs_pre_prof( profdata, prodatqc, ld_var 1, ld_var2, &257 SUBROUTINE obs_pre_prof( profdata, prodatqc, ld_var, & 258 258 & kpi, kpj, kpk, & 259 & zmask 1, pglam1, pgphi1, zmask2, pglam2, pgphi2, &259 & zmask, pglam, pgphi, & 260 260 & ld_nea, ld_bound_reject, kdailyavtypes, kqc_cutoff ) 261 261 … … 284 284 TYPE(obs_prof), INTENT(INOUT) :: profdata ! Full set of profile data 285 285 TYPE(obs_prof), INTENT(INOUT) :: prodatqc ! Subset of profile data not failing screening 286 LOGICAL, INTENT(IN) :: ld_var1 ! Observed variables switches287 LOGICAL, INTENT(IN) :: ld_var2286 LOGICAL, DIMENSION(profdata%nvar), INTENT(IN) :: & 287 & ld_var ! Observed variables switches 288 288 LOGICAL, INTENT(IN) :: ld_nea ! Switch for rejecting observation near land 289 289 LOGICAL, INTENT(IN) :: ld_bound_reject ! Switch for rejecting observations near the boundary … … 291 291 INTEGER, DIMENSION(imaxavtypes), OPTIONAL :: & 292 292 & kdailyavtypes ! Types for daily averages 293 REAL(wp), INTENT(IN), DIMENSION(kpi,kpj,kpk) :: & 294 & zmask1, & 295 & zmask2 296 REAL(wp), INTENT(IN), DIMENSION(kpi,kpj) :: & 297 & pglam1, & 298 & pglam2, & 299 & pgphi1, & 300 & pgphi2 293 REAL(wp), INTENT(IN), DIMENSION(kpi,kpj,kpk,profdata%nvar) :: & 294 & zmask 295 REAL(wp), INTENT(IN), DIMENSION(kpi,kpj,profdata%nvar) :: & 296 & pglam, & 297 & pgphi 301 298 INTEGER, INTENT(IN), OPTIONAL :: kqc_cutoff ! cut off for QC value 302 299 … … 309 306 INTEGER :: imin0 310 307 INTEGER :: icycle ! Current assimilation cycle 311 ! Counters for observations that are 312 INTEGER :: iotdobs ! - outside time domain 313 INTEGER :: iosdv1obs ! - outside space domain (variable 1) 314 INTEGER :: iosdv2obs ! - outside space domain (variable 2) 315 INTEGER :: ilanv1obs ! - within a model land cell (variable 1) 316 INTEGER :: ilanv2obs ! - within a model land cell (variable 2) 317 INTEGER :: inlav1obs ! - close to land (variable 1) 318 INTEGER :: inlav2obs ! - close to land (variable 2) 319 INTEGER :: ibdyv1obs ! - boundary (variable 1) 320 INTEGER :: ibdyv2obs ! - boundary (variable 2) 321 INTEGER :: igrdobs ! - fail the grid search 322 INTEGER :: iuvchku ! - reject u if v rejected and vice versa 323 INTEGER :: iuvchkv ! 324 ! Global counters for observations that are 325 INTEGER :: iotdobsmpp ! - outside time domain 326 INTEGER :: iosdv1obsmpp ! - outside space domain (variable 1) 327 INTEGER :: iosdv2obsmpp ! - outside space domain (variable 2) 328 INTEGER :: ilanv1obsmpp ! - within a model land cell (variable 1) 329 INTEGER :: ilanv2obsmpp ! - within a model land cell (variable 2) 330 INTEGER :: inlav1obsmpp ! - close to land (variable 1) 331 INTEGER :: inlav2obsmpp ! - close to land (variable 2) 332 INTEGER :: ibdyv1obsmpp ! - boundary (variable 1) 333 INTEGER :: ibdyv2obsmpp ! - boundary (variable 2) 334 INTEGER :: igrdobsmpp ! - fail the grid search 335 INTEGER :: iuvchkumpp ! - reject var1 if var2 rejected and vice versa 336 INTEGER :: iuvchkvmpp ! 308 ! Counters for observations that are 309 INTEGER :: iotdobs ! - outside time domain 310 INTEGER, DIMENSION(profdata%nvar) :: iosdvobs ! - outside space domain 311 INTEGER, DIMENSION(profdata%nvar) :: ilanvobs ! - within a model land cell 312 INTEGER, DIMENSION(profdata%nvar) :: inlavobs ! - close to land 313 INTEGER, DIMENSION(profdata%nvar) :: ibdyvobs ! - boundary 314 INTEGER :: igrdobs ! - fail the grid search 315 INTEGER :: iuvchku ! - reject UVEL if VVEL rejected 316 INTEGER :: iuvchkv ! - reject VVEL if UVEL rejected 317 ! Global counters for observations that are 318 INTEGER :: iotdobsmpp ! - outside time domain 319 INTEGER, DIMENSION(profdata%nvar) :: iosdvobsmpp ! - outside space domain 320 INTEGER, DIMENSION(profdata%nvar) :: ilanvobsmpp ! - within a model land cell 321 INTEGER, DIMENSION(profdata%nvar) :: inlavobsmpp ! - close to land 322 INTEGER, DIMENSION(profdata%nvar) :: ibdyvobsmpp ! - boundary 323 INTEGER :: igrdobsmpp ! - fail the grid search 324 INTEGER :: iuvchkumpp ! - reject UVEL if VVEL rejected 325 INTEGER :: iuvchkvmpp ! - reject VVEL if UVEL rejected 337 326 TYPE(obs_prof_valid) :: llvalid ! Profile selection 338 327 TYPE(obs_prof_valid), DIMENSION(profdata%nvar) :: & 339 & llvvalid ! var 1,var2selection328 & llvvalid ! vars selection 340 329 INTEGER :: jvar ! Variable loop variable 341 330 INTEGER :: jobs ! Obs. loop variable 342 331 INTEGER :: jstp ! Time loop variable 343 332 INTEGER :: inrc ! Time index variable 333 CHARACTER(LEN=256) :: cout1 ! Diagnostic output line 334 CHARACTER(LEN=256) :: cout2 ! Diagnostic output line 344 335 345 336 IF(lwp) WRITE(numout,*)'obs_pre_prof: Preparing the profile data...' … … 355 346 icycle = no ! Assimilation cycle 356 347 357 ! Diagnotics counters for various failures. 358 359 iotdobs = 0 360 igrdobs = 0 361 iosdv1obs = 0 362 iosdv2obs = 0 363 ilanv1obs = 0 364 ilanv2obs = 0 365 inlav1obs = 0 366 inlav2obs = 0 367 ibdyv1obs = 0 368 ibdyv2obs = 0 369 iuvchku = 0 370 iuvchkv = 0 348 ! Diagnostics counters for various failures. 349 350 iotdobs = 0 351 igrdobs = 0 352 iosdvobs(:) = 0 353 ilanvobs(:) = 0 354 inlavobs(:) = 0 355 ibdyvobs(:) = 0 356 iuvchku = 0 357 iuvchkv = 0 371 358 372 359 … … 401 388 ! ----------------------------------------------------------------------- 402 389 403 CALL obs_coo_grd( profdata%nprof, profdata%mi(:,1), profdata%mj(:,1), & 404 & profdata%nqc, igrdobs ) 405 IF ( ld_var2 ) THEN 406 CALL obs_coo_grd( profdata%nprof, profdata%mi(:,2), profdata%mj(:,2), & 407 & profdata%nqc, igrdobs ) 408 ENDIF 390 DO jvar = 1, profdata%nvar 391 CALL obs_coo_grd( profdata%nprof, profdata%mi(:,jvar), profdata%mj(:,jvar), & 392 & profdata%nqc, igrdobs ) 393 END DO 409 394 410 395 CALL obs_mpp_sum_integer( igrdobs, igrdobsmpp ) … … 421 406 ! ----------------------------------------------------------------------- 422 407 423 ! Variable 1 424 CALL obs_coo_spc_3d( profdata%nprof, profdata%nvprot(1), & 425 & profdata%npvsta(:,1), profdata%npvend(:,1), & 426 & jpi, jpj, & 427 & jpk, & 428 & profdata%mi, profdata%mj, & 429 & profdata%var(1)%mvk, & 430 & profdata%rlam, profdata%rphi, & 431 & profdata%var(1)%vdep, & 432 & pglam1, pgphi1, & 433 & gdept_1d, zmask1, & 434 & profdata%nqc, profdata%var(1)%nvqc, & 435 & iosdv1obs, ilanv1obs, & 436 & inlav1obs, ld_nea, & 437 & ibdyv1obs, ld_bound_reject, & 438 & iqc_cutoff ) 439 440 CALL obs_mpp_sum_integer( iosdv1obs, iosdv1obsmpp ) 441 CALL obs_mpp_sum_integer( ilanv1obs, ilanv1obsmpp ) 442 CALL obs_mpp_sum_integer( inlav1obs, inlav1obsmpp ) 443 CALL obs_mpp_sum_integer( ibdyv1obs, ibdyv1obsmpp ) 444 445 IF ( ld_var2 ) THEN 446 ! Variable 2 447 CALL obs_coo_spc_3d( profdata%nprof, profdata%nvprot(2), & 448 & profdata%npvsta(:,2), profdata%npvend(:,2), & 449 & jpi, jpj, & 450 & jpk, & 451 & profdata%mi, profdata%mj, & 452 & profdata%var(2)%mvk, & 453 & profdata%rlam, profdata%rphi, & 454 & profdata%var(2)%vdep, & 455 & pglam2, pgphi2, & 456 & gdept_1d, zmask2, & 457 & profdata%nqc, profdata%var(2)%nvqc, & 458 & iosdv2obs, ilanv2obs, & 459 & inlav2obs, ld_nea, & 460 & ibdyv2obs, ld_bound_reject, & 408 DO jvar = 1, profdata%nvar 409 CALL obs_coo_spc_3d( profdata%nprof, profdata%nvprot(jvar), & 410 & profdata%npvsta(:,jvar), profdata%npvend(:,jvar), & 411 & jpi, jpj, & 412 & jpk, & 413 & profdata%mi, profdata%mj, & 414 & profdata%var(jvar)%mvk, & 415 & profdata%rlam, profdata%rphi, & 416 & profdata%var(jvar)%vdep, & 417 & pglam(:,:,jvar), pgphi(:,:,jvar), & 418 & gdept_1d, zmask(:,:,:,jvar), & 419 & profdata%nqc, profdata%var(jvar)%nvqc, & 420 & iosdvobs(jvar), ilanvobs(jvar), & 421 & inlavobs(jvar), ld_nea, & 422 & ibdyvobs(jvar), ld_bound_reject, & 461 423 & iqc_cutoff ) 462 424 463 CALL obs_mpp_sum_integer( iosdv 2obs, iosdv2obsmpp)464 CALL obs_mpp_sum_integer( ilanv 2obs, ilanv2obsmpp)465 CALL obs_mpp_sum_integer( inlav 2obs, inlav2obsmpp)466 CALL obs_mpp_sum_integer( ibdyv 2obs, ibdyv2obsmpp)467 END IF425 CALL obs_mpp_sum_integer( iosdvobs(jvar), iosdvobsmpp(jvar) ) 426 CALL obs_mpp_sum_integer( ilanvobs(jvar), ilanvobsmpp(jvar) ) 427 CALL obs_mpp_sum_integer( inlavobs(jvar), inlavobsmpp(jvar) ) 428 CALL obs_mpp_sum_integer( ibdyvobs(jvar), ibdyvobsmpp(jvar) ) 429 END DO 468 430 469 431 ! ----------------------------------------------------------------------- … … 516 478 517 479 WRITE(numout,*) 518 WRITE(numout,*) ' Profiles outside time domain = ', &480 WRITE(numout,*) ' Profiles outside time domain = ', & 519 481 & iotdobsmpp 520 WRITE(numout,*) ' Remaining profiles that failed grid search = ', &482 WRITE(numout,*) ' Remaining profiles that failed grid search = ', & 521 483 & igrdobsmpp 522 WRITE(numout,*) ' Remaining '//prodatqc%cvars(1)//' data outside space domain = ', & 523 & iosdv1obsmpp 524 WRITE(numout,*) ' Remaining '//prodatqc%cvars(1)//' data at land points = ', & 525 & ilanv1obsmpp 526 IF (ld_nea) THEN 527 WRITE(numout,*) ' Remaining '//prodatqc%cvars(1)//' data near land points (removed) = ',& 528 & inlav1obsmpp 529 ELSE 530 WRITE(numout,*) ' Remaining '//prodatqc%cvars(1)//' data near land points (kept) = ',& 531 & inlav1obsmpp 532 ENDIF 533 IF ( TRIM(profdata%cvars(1)) == 'UVEL' ) THEN 534 WRITE(numout,*) ' U observation rejected since V rejected = ', & 535 & iuvchku 536 ENDIF 537 WRITE(numout,*) ' Remaining '//prodatqc%cvars(1)//' data near open boundary (removed) = ',& 538 & ibdyv1obsmpp 539 WRITE(numout,*) ' '//prodatqc%cvars(1)//' data accepted = ', & 540 & prodatqc%nvprotmpp(1) 541 IF ( ld_var2 ) THEN 542 WRITE(numout,*) ' Remaining '//prodatqc%cvars(2)//' data outside space domain = ', & 543 & iosdv2obsmpp 544 WRITE(numout,*) ' Remaining '//prodatqc%cvars(2)//' data at land points = ', & 545 & ilanv2obsmpp 484 DO jvar = 1, profdata%nvar 485 WRITE(numout,*) ' Remaining '//prodatqc%cvars(jvar)//' data outside space domain = ', & 486 & iosdvobsmpp(jvar) 487 WRITE(numout,*) ' Remaining '//prodatqc%cvars(jvar)//' data at land points = ', & 488 & ilanvobsmpp(jvar) 546 489 IF (ld_nea) THEN 547 WRITE(numout,*) ' Remaining '//prodatqc%cvars( 2)//' data near land points (removed) = ',&548 & inlav 2obsmpp490 WRITE(numout,*) ' Remaining '//prodatqc%cvars(jvar)//' data near land points (removed) = ',& 491 & inlavobsmpp(jvar) 549 492 ELSE 550 WRITE(numout,*) ' Remaining '//prodatqc%cvars(2)//' data near land points (kept) = ',& 551 & inlav2obsmpp 552 ENDIF 553 IF ( TRIM(profdata%cvars(1)) == 'UVEL' ) THEN 493 WRITE(numout,*) ' Remaining '//prodatqc%cvars(jvar)//' data near land points (kept) = ',& 494 & inlavobsmpp(jvar) 495 ENDIF 496 IF ( TRIM(profdata%cvars(jvar)) == 'UVEL' ) THEN 497 WRITE(numout,*) ' U observation rejected since V rejected = ', & 498 & iuvchku 499 ELSE IF ( TRIM(profdata%cvars(jvar)) == 'VVEL' ) THEN 554 500 WRITE(numout,*) ' V observation rejected since U rejected = ', & 555 501 & iuvchkv 556 502 ENDIF 557 WRITE(numout,*) ' Remaining '//prodatqc%cvars( 2)//' data near open boundary (removed) = ',&558 & ibdyv 2obsmpp559 WRITE(numout,*) ' '//prodatqc%cvars( 2)//' data accepted = ', &560 & prodatqc%nvprotmpp( 2)561 END IF503 WRITE(numout,*) ' Remaining '//prodatqc%cvars(jvar)//' data near open boundary (removed) = ',& 504 & ibdyvobsmpp(jvar) 505 WRITE(numout,*) ' '//prodatqc%cvars(jvar)//' data accepted = ', & 506 & prodatqc%nvprotmpp(jvar) 507 END DO 562 508 563 509 WRITE(numout,*) 564 510 WRITE(numout,*) ' Number of observations per time step :' 565 511 WRITE(numout,*) 566 IF ( ld_var2 ) THEN 567 WRITE(numout,'(10X,A,5X,A,5X,A,A)')'Time step','Profiles', & 568 & ' '//prodatqc%cvars(1)//' ', & 569 & ' '//prodatqc%cvars(2)//' ' 570 ELSE 571 WRITE(numout,'(10X,A,5X,A,5X,A)')'Time step','Profiles', & 572 & ' '//prodatqc%cvars(1)//' ' 573 ENDIF 574 WRITE(numout,998) 512 WRITE(cout1,'(10X,A9,5X,A8)') 'Time step', 'Profiles' 513 WRITE(cout2,'(10X,A9,5X,A8)') '---------', '--------' 514 DO jvar = 1, prodatqc%nvar 515 WRITE(cout1,'(A,5X,A11)') TRIM(cout1), TRIM(prodatqc%cvars(jvar)) 516 WRITE(cout2,'(A,5X,A11)') TRIM(cout2), '-----------' 517 END DO 518 WRITE(numout,*) cout1 519 WRITE(numout,*) cout2 575 520 ENDIF 576 521 … … 599 544 DO jstp = nit000 - 1, nitend 600 545 inrc = jstp - nit000 + 2 601 IF ( ld_var2 ) THEN 602 WRITE(numout,999) jstp, prodatqc%npstpmpp(inrc), & 603 & prodatqc%nvstpmpp(inrc,1), & 604 & prodatqc%nvstpmpp(inrc,2) 605 ELSE 606 WRITE(numout,999) jstp, prodatqc%npstpmpp(inrc), & 607 & prodatqc%nvstpmpp(inrc,1) 608 ENDIF 546 WRITE(cout1,'(10X,I9,5X,I8)') jstp, prodatqc%npstpmpp(inrc) 547 DO jvar = 1, prodatqc%nvar 548 WRITE(cout1,'(A,5X,I11)') TRIM(cout1), prodatqc%nvstpmpp(inrc,jvar) 549 END DO 550 WRITE(numout,*) cout1 609 551 END DO 610 552 ENDIF 611 612 998 FORMAT(10X,'---------',5X,'--------',5X,'-----------',5X,'----------------')613 999 FORMAT(10X,I9,5X,I8,5X,I11,5X,I8)614 553 615 554 END SUBROUTINE obs_pre_prof
Note: See TracChangeset
for help on using the changeset viewer.