Changeset 14165 for branches/UKMO/dev_r5518_obs_oper_update_sit_SMOS/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90
- Timestamp:
- 2020-12-12T12:31:26+01:00 (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_obs_oper_update_sit_SMOS/NEMOGCM/NEMO/OPA_SRC/OBS/obs_write.F90
r12820 r14165 349 349 fbdata%ivlqc(ik,jo,jvar) = IBSET(profdata%var(jvar)%nvqc(jk),2) 350 350 fbdata%ivlqcf(1,ik,jo,jvar) = profdata%var(jvar)%nvqcf(1,jk) 351 fbdata%ivlqcf(2,ik,jo,jvar) = IAND(profdata%var(jvar)%nvqc(jk),b'0000 0000 11111111')351 fbdata%ivlqcf(2,ik,jo,jvar) = IAND(profdata%var(jvar)%nvqc(jk),b'0000000011111111') 352 352 ELSE 353 353 fbdata%ivlqc(ik,jo,jvar) = profdata%var(jvar)%nvqc(jk) … … 437 437 CHARACTER(LEN=10) :: clfiletype 438 438 CHARACTER(LEN=12), PARAMETER :: cpname = 'obs_wri_surf' 439 CHARACTER(LEN=ilenlong) :: cllongname ! Long name of variable440 CHARACTER(LEN=ilenunit) :: clunits ! Units of variable441 CHARACTER(LEN=ilengrid) :: clgrid ! Grid of variable439 CHARACTER(LEN=ilenlong), DIMENSION(surfdata%nvar) :: cllongname ! Long name of variable 440 CHARACTER(LEN=ilenunit), DIMENSION(surfdata%nvar) :: clunits ! Units of variable 441 CHARACTER(LEN=ilengrid), DIMENSION(surfdata%nvar) :: clgrid ! Grid of variable 442 442 INTEGER :: jo 443 443 INTEGER :: ja 444 444 INTEGER :: je 445 INTEGER :: jv 445 446 INTEGER :: iadd 446 447 INTEGER :: iext … … 522 523 CASE('SST') 523 524 524 clfiletype = 'sstfb'525 cllongname = 'Sea surface temperature'526 clunits = 'Degree centigrade'527 clgrid = 'T'525 clfiletype = 'sstfb' 526 cllongname(1) = 'Sea surface temperature' 527 clunits(1) = 'Degree centigrade' 528 clgrid(1) = 'T' 528 529 529 530 CASE('ICECONC') 530 531 531 clfiletype = 'sicfb'532 cllongname = 'Sea ice concentration'533 clunits = 'Fraction'534 clgrid = 'T'532 clfiletype = 'sicfb' 533 cllongname(1) = 'Sea ice concentration' 534 clunits(1) = 'Fraction' 535 clgrid(1) = 'T' 535 536 536 537 CASE('SIT') 537 538 538 clfiletype = 'sitfb'539 cllongname = 'Sea ice thickness'540 clunits = 'm'541 clgrid = 'T'539 clfiletype = 'sitfb' 540 cllongname(1) = 'Sea ice thickness' 541 clunits(1) = 'm' 542 clgrid(1) = 'T' 542 543 543 544 CASE('FBD') … … 552 553 CASE('SSS') 553 554 554 clfiletype = 'sssfb' 555 cllongname = 'Sea surface salinity' 556 clunits = 'psu' 557 clgrid = 'T' 555 clfiletype = 'sssfb' 556 cllongname(1) = 'Sea surface salinity' 557 clunits(1) = 'psu' 558 clgrid(1) = 'T' 559 560 CASE('UVEL') 561 562 clfiletype = 'ssvfb' 563 cllongname(1) = 'Eastward sea surface velocity' 564 clunits(1) = 'm s-1' 565 clgrid(1) = 'U' 566 cllongname(2) = 'Northward sea surface velocity' 567 clunits(2) = 'm s-1' 568 clgrid(2) = 'V' 558 569 559 570 CASE('SLCHLTOT') 560 571 561 clfiletype = 'slchltotfb'562 cllongname = 'Surface total log10(chlorophyll)'563 clunits = 'log10(mg/m3)'564 clgrid = 'T'572 clfiletype = 'slchltotfb' 573 cllongname(1) = 'Surface total log10(chlorophyll)' 574 clunits(1) = 'log10(mg/m3)' 575 clgrid(1) = 'T' 565 576 566 577 CASE('SLCHLDIA') 567 578 568 clfiletype = 'slchldiafb'569 cllongname = 'Surface diatom log10(chlorophyll)'570 clunits = 'log10(mg/m3)'571 clgrid = 'T'579 clfiletype = 'slchldiafb' 580 cllongname(1) = 'Surface diatom log10(chlorophyll)' 581 clunits(1) = 'log10(mg/m3)' 582 clgrid(1) = 'T' 572 583 573 584 CASE('SLCHLNON') 574 585 575 clfiletype = 'slchlnonfb'576 cllongname = 'Surface non-diatom log10(chlorophyll)'577 clunits = 'log10(mg/m3)'578 clgrid = 'T'586 clfiletype = 'slchlnonfb' 587 cllongname(1) = 'Surface non-diatom log10(chlorophyll)' 588 clunits(1) = 'log10(mg/m3)' 589 clgrid(1) = 'T' 579 590 580 591 CASE('SLCHLDIN') 581 592 582 clfiletype = 'slchldinfb'583 cllongname = 'Surface dinoflagellate log10(chlorophyll)'584 clunits = 'log10(mg/m3)'585 clgrid = 'T'593 clfiletype = 'slchldinfb' 594 cllongname(1) = 'Surface dinoflagellate log10(chlorophyll)' 595 clunits(1) = 'log10(mg/m3)' 596 clgrid(1) = 'T' 586 597 587 598 CASE('SLCHLMIC') 588 599 589 clfiletype = 'slchlmicfb'590 cllongname = 'Surface microphytoplankton log10(chlorophyll)'591 clunits = 'log10(mg/m3)'592 clgrid = 'T'600 clfiletype = 'slchlmicfb' 601 cllongname(1) = 'Surface microphytoplankton log10(chlorophyll)' 602 clunits(1) = 'log10(mg/m3)' 603 clgrid(1) = 'T' 593 604 594 605 CASE('SLCHLNAN') 595 606 596 clfiletype = 'slchlnanfb'597 cllongname = 'Surface nanophytoplankton log10(chlorophyll)'598 clunits = 'log10(mg/m3)'599 clgrid = 'T'607 clfiletype = 'slchlnanfb' 608 cllongname(1) = 'Surface nanophytoplankton log10(chlorophyll)' 609 clunits(1) = 'log10(mg/m3)' 610 clgrid(1) = 'T' 600 611 601 612 CASE('SLCHLPIC') 602 613 603 clfiletype = 'slchlpicfb'604 cllongname = 'Surface picophytoplankton log10(chlorophyll)'605 clunits = 'log10(mg/m3)'606 clgrid = 'T'614 clfiletype = 'slchlpicfb' 615 cllongname(1) = 'Surface picophytoplankton log10(chlorophyll)' 616 clunits(1) = 'log10(mg/m3)' 617 clgrid(1) = 'T' 607 618 608 619 CASE('SCHLTOT') … … 615 626 CASE('SLPHYTOT') 616 627 617 clfiletype = 'slphytotfb'618 cllongname = 'Surface total log10(phytoplankton carbon)'619 clunits = 'log10(mmolC/m3)'620 clgrid = 'T'628 clfiletype = 'slphytotfb' 629 cllongname(1) = 'Surface total log10(phytoplankton carbon)' 630 clunits(1) = 'log10(mmolC/m3)' 631 clgrid(1) = 'T' 621 632 622 633 CASE('SLPHYDIA') 623 634 624 clfiletype = 'slphydiafb'625 cllongname = 'Surface diatom log10(phytoplankton carbon)'626 clunits = 'log10(mmolC/m3)'627 clgrid = 'T'635 clfiletype = 'slphydiafb' 636 cllongname(1) = 'Surface diatom log10(phytoplankton carbon)' 637 clunits(1) = 'log10(mmolC/m3)' 638 clgrid(1) = 'T' 628 639 629 640 CASE('SLPHYNON') 630 641 631 clfiletype = 'slphynonfb'632 cllongname = 'Surface non-diatom log10(phytoplankton carbon)'633 clunits = 'log10(mmolC/m3)'634 clgrid = 'T'642 clfiletype = 'slphynonfb' 643 cllongname(1) = 'Surface non-diatom log10(phytoplankton carbon)' 644 clunits(1) = 'log10(mmolC/m3)' 645 clgrid(1) = 'T' 635 646 636 647 CASE('SSPM') 637 648 638 clfiletype = 'sspmfb'639 cllongname = 'Surface suspended particulate matter'640 clunits = 'g/m3'641 clgrid = 'T'649 clfiletype = 'sspmfb' 650 cllongname(1) = 'Surface suspended particulate matter' 651 clunits(1) = 'g/m3' 652 clgrid(1) = 'T' 642 653 643 654 CASE('SKD490') 644 655 645 clfiletype = 'skd490fb'646 cllongname = 'Surface attenuation coefficient of downwelling radiation at 490 nm'647 clunits = 'm-1'648 clgrid = 'T'656 clfiletype = 'skd490fb' 657 cllongname(1) = 'Surface attenuation coefficient of downwelling radiation at 490 nm' 658 clunits(1) = 'm-1' 659 clgrid(1) = 'T' 649 660 650 661 CASE('SFCO2') 651 662 652 clfiletype = 'sfco2fb'653 cllongname = 'Surface fugacity of carbon dioxide'654 clunits = 'uatm'655 clgrid = 'T'663 clfiletype = 'sfco2fb' 664 cllongname(1) = 'Surface fugacity of carbon dioxide' 665 clunits(1) = 'uatm' 666 clgrid(1) = 'T' 656 667 657 668 CASE('SPCO2') 658 669 659 clfiletype = 'spco2fb'660 cllongname = 'Surface partial pressure of carbon dioxide'661 clunits = 'uatm'662 clgrid = 'T'670 clfiletype = 'spco2fb' 671 cllongname(1) = 'Surface partial pressure of carbon dioxide' 672 clunits(1) = 'uatm' 673 clgrid(1) = 'T' 663 674 664 675 CASE DEFAULT … … 673 684 IF ( TRIM(surfdata%cvars(1)) /= 'SLA' ) THEN 674 685 675 CALL alloc_obfbdata( fbdata, 1, surfdata%nsurf, 1, &686 CALL alloc_obfbdata( fbdata, surfdata%nvar, surfdata%nsurf, 1, & 676 687 & 1 + iadd_std + iadd_clm + iadd, iext, .TRUE. ) 677 688 678 fbdata%cname(1) = surfdata%cvars(1) 679 fbdata%coblong(1) = cllongname 680 fbdata%cobunit(1) = clunits 689 DO jv = 1, surfdata%nvar 690 fbdata%cname(jv) = surfdata%cvars(jv) 691 fbdata%coblong(jv) = cllongname(jv) 692 fbdata%cobunit(jv) = clunits(jv) 693 END DO 681 694 DO je = 1, iext 682 695 fbdata%cextname(je) = pext%cdname(je) … … 684 697 fbdata%cextunit(je) = pext%cdunit(je,1) 685 698 END DO 686 IF ( TRIM(surfdata%cvars(1)) == 'ICECONC' ) THEN 687 fbdata%caddlong(1,1) = 'Model interpolated ICE' 688 ELSE 689 fbdata%caddlong(1,1) = 'Model interpolated ' // TRIM(surfdata%cvars(1)) 690 ENDIF 691 fbdata%caddunit(1,1) = clunits 692 fbdata%cgrid(1) = clgrid 699 DO jv = 1, surfdata%nvar 700 IF ( TRIM(surfdata%cvars(1)) == 'ICECONC' ) THEN 701 fbdata%caddlong(1,jv) = 'Model interpolated ICE' 702 ELSE 703 fbdata%caddlong(1,jv) = 'Model interpolated ' // TRIM(surfdata%cvars(jv)) 704 ENDIF 705 fbdata%caddunit(1,jv) = clunits(jv) 706 fbdata%cgrid(jv) = clgrid(jv) 707 END DO 693 708 DO ja = 1, iadd 694 709 fbdata%caddname(1+iadd_mdt+iadd_std+iadd_clm+ja) = padd%cdname(ja) 695 fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm+ja,1) = padd%cdlong(ja,1) 696 fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm+ja,1) = padd%cdunit(ja,1) 697 END DO 698 699 ENDIF 700 710 DO jv = 1, surfdata%nvar 711 fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm+ja,jv) = padd%cdlong(ja,jv) 712 fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm+ja,jv) = padd%cdunit(ja,jv) 713 END DO 714 END DO 715 ENDIF 716 701 717 fbdata%caddname(1) = 'Hx' 702 718 IF ( indx_std /= -1 ) THEN 703 719 fbdata%caddname(1+iadd_mdt+iadd_std) = surfdata%cext(indx_std) 704 fbdata%caddlong(1+iadd_mdt+iadd_std,1) = 'Obs error standard deviation' 705 fbdata%caddunit(1+iadd_mdt+iadd_std,1) = fbdata%cobunit(1) 720 DO jv = 1, surfdata%nvar 721 fbdata%caddlong(1+iadd_mdt+iadd_std,1) = 'Obs error standard deviation' 722 fbdata%caddunit(1+iadd_mdt+iadd_std,1) = fbdata%cobunit(1) 723 END DO 706 724 ENDIF 707 725 708 726 IF ( surfdata%lclim ) THEN 709 727 fbdata%caddname(1+iadd_mdt+iadd_std+iadd_clm) = 'CLM' 710 fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm,1) = 'Climatology' 711 fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm,1) = fbdata%cobunit(1) 712 ENDIF 713 714 728 DO jv = 1, surfdata%nvar 729 fbdata%caddlong(1+iadd_mdt+iadd_std+iadd_clm,jv) = 'Climatology' 730 fbdata%caddunit(1+iadd_mdt+iadd_std+iadd_clm,jv) = fbdata%cobunit(1) 731 END DO 732 ENDIF 733 715 734 WRITE(clfname, FMT="(A,'_fdbk_',I4.4,'.nc')") TRIM(clfiletype), nproc 716 735 … … 719 738 WRITE(numout,*)'obs_wri_surf :' 720 739 WRITE(numout,*)'~~~~~~~~~~~~~' 721 WRITE(numout,*)'Writing '//TRIM( surfdata%cvars(1))//' feedback file : ',TRIM(clfname)740 WRITE(numout,*)'Writing '//TRIM(clfiletype)//' feedback file : ',TRIM(clfname) 722 741 ENDIF 723 742 … … 733 752 fbdata%ioqc(jo) = 4 734 753 fbdata%ioqcf(1,jo) = 0 735 fbdata%ioqcf(2,jo) = IAND(surfdata%nqc(jo),b'0000 0000 11111111')754 fbdata%ioqcf(2,jo) = IAND(surfdata%nqc(jo),b'0000000011111111') 736 755 ELSE 737 756 fbdata%ioqc(jo) = surfdata%nqc(jo) … … 745 764 fbdata%kindex(jo) = surfdata%nsfil(jo) 746 765 IF (ln_grid_global) THEN 747 fbdata%iobsi(jo,1) = surfdata%mi(jo) 748 fbdata%iobsj(jo,1) = surfdata%mj(jo) 766 DO jv = 1, surfdata%nvar 767 fbdata%iobsi(jo,jv) = surfdata%mi(jo,jv) 768 fbdata%iobsj(jo,jv) = surfdata%mj(jo,jv) 769 END DO 749 770 ELSE 750 fbdata%iobsi(jo,1) = mig(surfdata%mi(jo)) 751 fbdata%iobsj(jo,1) = mjg(surfdata%mj(jo)) 771 DO jv = 1, surfdata%nvar 772 fbdata%iobsi(jo,jv) = mig(surfdata%mi(jo,jv)) 773 fbdata%iobsj(jo,jv) = mjg(surfdata%mj(jo,jv)) 774 END DO 752 775 ENDIF 753 776 CALL greg2jul( 0, & … … 759 782 & fbdata%ptim(jo), & 760 783 & krefdate = 19500101 ) 761 762 fbdata%pob(1,jo,1) = surfdata%robs(jo,1) 784 763 785 fbdata%pdep(1,jo) = 0.0 764 786 fbdata%idqc(1,jo) = 0 765 787 fbdata%idqcf(:,1,jo) = 0 766 IF ( surfdata%nqc(jo) > 255 ) THEN 767 fbdata%ivqc(jo,1) = 4 768 fbdata%ivlqc(1,jo,1) = 4 769 fbdata%ivlqcf(1,1,jo,1) = 0 770 fbdata%ivlqcf(2,1,jo,1) = IAND(surfdata%nqc(jo),b'0000 0000 1111 1111') 771 ELSE 772 fbdata%ivqc(jo,1) = surfdata%nqc(jo) 773 fbdata%ivlqc(1,jo,1) = surfdata%nqc(jo) 774 fbdata%ivlqcf(:,1,jo,1) = 0 775 ENDIF 776 fbdata%iobsk(1,jo,1) = 0 777 778 ! Additional variables. 779 ! Hx is always the first additional variable 780 fbdata%padd(1,jo,1,1) = surfdata%rmod(jo,1) 781 ! MDT is output as an additional variable if SLA obs type 782 IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) THEN 783 fbdata%padd(1,jo,1+iadd_mdt,1) = surfdata%rext(jo,1) 784 ENDIF 785 ! STD is output as an additional variable if available 786 IF ( indx_std /= -1 ) THEN 787 fbdata%padd(1,jo,1+iadd_mdt+iadd_std,1) = surfdata%rext(jo,indx_std) 788 ENDIF 789 ! CLM is output as an additional variable if available 790 IF ( surfdata%lclim ) THEN 791 fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm,1) = surfdata%rclm(jo,1) 792 ENDIF 793 ! Then other additional variables are output 794 DO ja = 1, iadd 795 fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm+ja,1) = & 796 & surfdata%rext(jo,padd%ipoint(ja)) 797 END DO 788 DO jv = 1, surfdata%nvar 789 fbdata%pob(1,jo,jv) = surfdata%robs(jo,jv) 798 790 791 IF ( surfdata%nqc(jo) > 255 ) THEN 792 fbdata%ivqc(jo,jv) = 4 793 fbdata%ivlqc(1,jo,jv) = 4 794 fbdata%ivlqcf(1,1,jo,jv) = 0 795 fbdata%ivlqcf(2,1,jo,jv) = IAND(surfdata%nqc(jo),b'0000000011111111') 796 ELSE 797 fbdata%ivqc(jo,jv) = surfdata%nqc(jo) 798 fbdata%ivlqc(1,jo,jv) = surfdata%nqc(jo) 799 fbdata%ivlqcf(:,1,jo,jv) = 0 800 ENDIF 801 fbdata%iobsk(1,jo,jv) = 0 802 803 804 ! Additional variables. 805 ! Hx is always the first additional variable 806 fbdata%padd(1,jo,1,jv) = surfdata%rmod(jo,jv) 807 ! MDT is output as an additional variable if SLA obs type 808 IF ( TRIM(surfdata%cvars(jv)) == 'SLA' ) THEN 809 fbdata%padd(1,jo,1+iadd_mdt,jv) = surfdata%rext(jo,1) 810 ENDIF 811 ! STD is output as an additional variable if available 812 IF ( indx_std /= -1 ) THEN 813 fbdata%padd(1,jo,1+iadd_mdt+iadd_std,jv) = surfdata%rext(jo,indx_std) 814 ENDIF 815 ! CLM is output as an additional variable if available 816 IF ( surfdata%lclim ) THEN 817 fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm,jv) = surfdata%rclm(jo,jv) 818 ENDIF 819 ! Then other additional variables are output 820 DO ja = 1, iadd 821 fbdata%padd(1,jo,1+iadd_mdt+iadd_std+iadd_clm+ja,jv) = & 822 & surfdata%rext(jo,padd%ipoint(ja)) 823 END DO 824 END DO 799 825 ! Extra variables 800 826 IF ( TRIM(surfdata%cvars(1)) == 'SLA' ) fbdata%pext(1,jo,1) = surfdata%rext(jo,2)
Note: See TracChangeset
for help on using the changeset viewer.