Changeset 5106
- Timestamp:
- 2015-02-25T17:12:01+01:00 (9 years ago)
- Location:
- branches/2014/dev_r4650_UKMO14.4_OBS_GENERAL_VINTERP/NEMOGCM/NEMO/OPA_SRC/OBS
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2014/dev_r4650_UKMO14.4_OBS_GENERAL_VINTERP/NEMOGCM/NEMO/OPA_SRC/OBS/diaobs.F90
r4746 r5106 1005 1005 & gdept_1d, & 1006 1006 #if defined key_vvl 1007 & gdept_n, & 1007 & gdept_n, & 1008 1008 #else 1009 & gdept_1d, &1009 & gdept_1d, & 1010 1010 #endif 1011 1011 & tmask, umask, vmask … … 1071 1071 & kstp, jpi, jpj, jpk, nit000, idaystp, & 1072 1072 & tsn(:,:,:,jp_tem), tsn(:,:,:,jp_sal), & 1073 & gdept_1d, tmask, n1dint, n2dint, 1073 & gdept_1d, tmask, n1dint, n2dint, & 1074 1074 & kdailyavtypes = endailyavtypes ) 1075 1075 ELSE -
branches/2014/dev_r4650_UKMO14.4_OBS_GENERAL_VINTERP/NEMOGCM/NEMO/OPA_SRC/OBS/obs_oper.F90
r4746 r5106 525 525 USE dom_oce, ONLY : & 526 526 #if defined key_vvl 527 gdepw_n527 & gdepw_n 528 528 #else 529 gdepw_0529 & gdepw_0 530 530 #endif 531 531 … … 551 551 INTEGER, DIMENSION(imaxavtypes), OPTIONAL :: & 552 552 & kdailyavtypes ! Types for daily averages 553 553 554 !! * Local declarations 554 555 INTEGER :: ji … … 566 567 INTEGER, DIMENSION(imaxavtypes) :: & 567 568 & idailyavtypes 569 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: & 570 & igrdi, & 571 & igrdj 572 INTEGER :: & 573 & inum_obs 574 INTEGER, ALLOCATABLE, DIMENSION(:) :: iv_indic 568 575 REAL(KIND=wp) :: zlam 569 576 REAL(KIND=wp) :: zphi … … 586 593 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: & 587 594 & zglam, & 588 & zgphi 589 INTEGER, DIMENSION(:,:,:), ALLOCATABLE :: & 590 & igrdi, & 591 & igrdj 592 INTEGER :: & 593 & inum_obs 595 & zgphi 594 596 REAL(KIND=wp), DIMENSION(1) :: zmsk_1 595 597 REAL(KIND=wp), DIMENSION(:,:,:), ALLOCATABLE :: interp_corner 596 INTEGER, ALLOCATABLE, DIMENSION(:) :: v_indic597 598 598 599 !------------------------------------------------------------------------ … … 658 659 ! Get the data for interpolation 659 660 ALLOCATE( & 660 & igrdi(2,2,ipro), &661 & igrdj(2,2,ipro), &662 & zglam(2,2,ipro), &663 & zgphi(2,2,ipro), &664 & zmask(2,2,kpk,ipro), &665 & zintt(2,2,kpk,ipro), &666 & zints(2,2,kpk,ipro), &667 & zgdept(2,2,kpk,ipro), &668 & zgdepw(2,2,kpk,ipro) &669 & )661 & igrdi(2,2,ipro), & 662 & igrdj(2,2,ipro), & 663 & zglam(2,2,ipro), & 664 & zgphi(2,2,ipro), & 665 & zmask(2,2,kpk,ipro), & 666 & zintt(2,2,kpk,ipro), & 667 & zints(2,2,kpk,ipro), & 668 & zgdept(2,2,kpk,ipro), & 669 & zgdepw(2,2,kpk,ipro) & 670 & ) 670 671 671 672 DO jobs = prodatqc%nprofup + 1, prodatqc%nprofup + ipro … … 695 696 696 697 ALLOCATE( & 697 & zinmt(2,2,kpk,ipro), &698 & zinms(2,2,kpk,ipro) &699 & )698 & zinmt(2,2,kpk,ipro), & 699 & zinms(2,2,kpk,ipro) & 700 & ) 700 701 701 702 CALL obs_int_comm_3d( 2, 2, ipro, kpk, igrdi, igrdj, & 702 & prodatqc%vdmean(:,:,:,1), zinmt )703 & prodatqc%vdmean(:,:,:,1), zinmt ) 703 704 CALL obs_int_comm_3d( 2, 2, ipro, kpk, igrdi, igrdj, & 704 & prodatqc%vdmean(:,:,:,2), zinms )705 & prodatqc%vdmean(:,:,:,2), zinms ) 705 706 706 707 ENDIF … … 740 741 741 742 IF ( ( prodatqc%npvend(jobs,1) > 0 ) .OR. & 742 & ( prodatqc%npvend(jobs,2) > 0 ) ) THEN743 & ( prodatqc%npvend(jobs,2) > 0 ) ) THEN 743 744 744 745 CALL obs_int_h2d_init( 1, 1, k2dint, zlam, zphi, & 745 & zglam(:,:,iobs), zgphi(:,:,iobs), &746 & zmask(:,:,1,iobs), zweig, zmsk_1 )746 & zglam(:,:,iobs), zgphi(:,:,iobs), & 747 & zmask(:,:,1,iobs), zweig, zmsk_1 ) 747 748 748 749 ENDIF … … 770 771 iend = prodatqc%npvend(jobs,1) 771 772 inum_obs = iend - ista + 1 772 ALLOCATE(interp_corner(2,2,inum_obs), v_indic(inum_obs))773 ALLOCATE(interp_corner(2,2,inum_obs),iv_indic(inum_obs)) 773 774 774 775 DO iin=1,2 … … 779 780 IF ( k1dint == 1 ) THEN 780 781 CALL obs_int_z1d_spl( kpk, & 781 & zinmt(iin,ijn,:,jobs), &782 & zobs2k, zgdept(iin,ijn,:,jobs), &783 & zmask(iin,ijn,:,jobs))782 & zinmt(iin,ijn,:,jobs), & 783 & zobs2k, zgdept(iin,ijn,:,jobs), & 784 & zmask(iin,ijn,:,jobs)) 784 785 ENDIF 785 786 786 787 CALL obs_level_search(kpk, & 787 & zgdept(iin,ijn,:,jobs), &788 & inum_obs, prodatqc%var(1)%vdep(ista:iend), &789 &v_indic)790 CALL obs_int_z1d(kpk, v_indic, k1dint, inum_obs, &791 & prodatqc%var(1)%vdep(ista:iend), &792 & zinmt(iin,ijn,:,jobs), &793 & zobs2k, interp_corner(iin,ijn,:), &794 & zgdept(iin,ijn,:,jobs), &795 & zmask(iin,ijn,:,jobs))788 & zgdept(iin,ijn,:,jobs), & 789 & inum_obs, prodatqc%var(1)%vdep(ista:iend), & 790 & iv_indic) 791 CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, & 792 & prodatqc%var(1)%vdep(ista:iend), & 793 & zinmt(iin,ijn,:,jobs), & 794 & zobs2k, interp_corner(iin,ijn,:), & 795 & zgdept(iin,ijn,:,jobs), & 796 & zmask(iin,ijn,:,jobs)) 796 797 797 798 ENDDO … … 802 803 803 804 CALL ctl_stop( ' A nonzero' // & 804 & ' number of profile T BUOY data should' // &805 & ' only occur at the end of a given day' )805 & ' number of profile T BUOY data should' // & 806 & ' only occur at the end of a given day' ) 806 807 807 808 ENDIF … … 815 816 iend = prodatqc%npvend(jobs,1) 816 817 inum_obs = iend - ista + 1 817 ALLOCATE(interp_corner(2,2,inum_obs), v_indic(inum_obs))818 ALLOCATE(interp_corner(2,2,inum_obs), iv_indic(inum_obs)) 818 819 DO iin=1,2 819 820 DO ijn=1,2 … … 822 823 IF ( k1dint == 1 ) THEN 823 824 CALL obs_int_z1d_spl( kpk, & 824 & zintt(iin,ijn,:,jobs),&825 & zobs2k, zgdept(iin,ijn,:,jobs), &826 & zmask(iin,ijn,:,jobs))825 & zintt(iin,ijn,:,jobs),& 826 & zobs2k, zgdept(iin,ijn,:,jobs), & 827 & zmask(iin,ijn,:,jobs)) 827 828 828 829 ENDIF 829 830 830 831 CALL obs_level_search(kpk, & 831 & zgdept(iin,ijn,:,jobs),&832 & inum_obs, prodatqc%var(1)%vdep(ista:iend), &833 &v_indic)834 CALL obs_int_z1d(kpk, v_indic, k1dint, inum_obs, &835 & prodatqc%var(1)%vdep(ista:iend), &836 & zintt(iin,ijn,:,jobs), &837 & zobs2k,interp_corner(iin,ijn,:), &838 & zgdept(iin,ijn,:,jobs), &839 & zmask(iin,ijn,:,jobs) )832 & zgdept(iin,ijn,:,jobs),& 833 & inum_obs, prodatqc%var(1)%vdep(ista:iend), & 834 & iv_indic) 835 CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, & 836 & prodatqc%var(1)%vdep(ista:iend), & 837 & zintt(iin,ijn,:,jobs), & 838 & zobs2k,interp_corner(iin,ijn,:), & 839 & zgdept(iin,ijn,:,jobs), & 840 & zmask(iin,ijn,:,jobs) ) 840 841 841 842 ENDDO … … 863 864 864 865 l_zweig(iin,ijn,1) = & 865 & zweig(iin,ijn,1) *&866 &MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,jobs) ) &867 & - prodatqc%var(1)%vdep(iend)),0._wp)866 & zweig(iin,ijn,1) * & 867 & MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,jobs) ) & 868 & - prodatqc%var(1)%vdep(iend)),0._wp) 868 869 869 870 EXIT depth_loop1 … … 880 881 881 882 882 DEALLOCATE(interp_corner, v_indic)883 DEALLOCATE(interp_corner,iv_indic) 883 884 884 885 ENDIF … … 901 902 iend = prodatqc%npvend(jobs,2) 902 903 inum_obs = iend - ista + 1 903 ALLOCATE(interp_corner(2,2,inum_obs), v_indic(inum_obs))904 ALLOCATE(interp_corner(2,2,inum_obs),iv_indic(inum_obs)) 904 905 905 906 DO iin=1,2 … … 910 911 IF ( k1dint == 1 ) THEN 911 912 CALL obs_int_z1d_spl( kpk, & 912 & zinms(iin,ijn,:,jobs), &913 & zobs2k, zgdept(iin,ijn,:,jobs), &914 & zmask(iin,ijn,:,jobs))913 & zinms(iin,ijn,:,jobs), & 914 & zobs2k, zgdept(iin,ijn,:,jobs), & 915 & zmask(iin,ijn,:,jobs)) 915 916 ENDIF 916 917 917 918 CALL obs_level_search(kpk, & 918 & zgdept(iin,ijn,:,jobs), &919 & inum_obs, prodatqc%var(2)%vdep(ista:iend), &920 &v_indic)921 CALL obs_int_z1d(kpk, v_indic, k1dint, inum_obs, &922 & prodatqc%var(2)%vdep(ista:iend), &923 & zinms(iin,ijn,:,jobs), &924 & zobs2k, interp_corner(iin,ijn,:), &925 & zgdept(iin,ijn,:,jobs), &926 & zmask(iin,ijn,:,jobs))919 & zgdept(iin,ijn,:,jobs), & 920 & inum_obs, prodatqc%var(2)%vdep(ista:iend), & 921 & iv_indic) 922 CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, & 923 & prodatqc%var(2)%vdep(ista:iend), & 924 & zinms(iin,ijn,:,jobs), & 925 & zobs2k, interp_corner(iin,ijn,:), & 926 & zgdept(iin,ijn,:,jobs), & 927 & zmask(iin,ijn,:,jobs)) 927 928 928 929 ENDDO … … 933 934 934 935 CALL ctl_stop( ' A nonzero' // & 935 & ' number of profile T BUOY data should' // &936 & ' only occur at the end of a given day' )936 & ' number of profile T BUOY data should' // & 937 & ' only occur at the end of a given day' ) 937 938 938 939 ENDIF … … 946 947 iend = prodatqc%npvend(jobs,2) 947 948 inum_obs = iend - ista + 1 948 ALLOCATE(interp_corner(2,2,inum_obs), v_indic(inum_obs))949 ALLOCATE(interp_corner(2,2,inum_obs), iv_indic(inum_obs)) 949 950 950 951 DO iin=1,2 … … 954 955 IF ( k1dint == 1 ) THEN 955 956 CALL obs_int_z1d_spl( kpk, & 956 & zints(iin,ijn,:,jobs),&957 & zobs2k, zgdept(iin,ijn,:,jobs), &958 & zmask(iin,ijn,:,jobs))957 & zints(iin,ijn,:,jobs),& 958 & zobs2k, zgdept(iin,ijn,:,jobs), & 959 & zmask(iin,ijn,:,jobs)) 959 960 960 961 ENDIF 961 962 962 963 CALL obs_level_search(kpk, & 963 & zgdept(iin,ijn,:,jobs),&964 & inum_obs, prodatqc%var(2)%vdep(ista:iend), &965 &v_indic)966 CALL obs_int_z1d(kpk, v_indic, k1dint, inum_obs,&967 & prodatqc%var(2)%vdep(ista:iend), &968 & zints(iin,ijn,:,jobs),&969 & zobs2k,interp_corner(iin,ijn,:),&970 & zgdept(iin,ijn,:,jobs),&971 & zmask(iin,ijn,:,jobs) )964 & zgdept(iin,ijn,:,jobs),& 965 & inum_obs, prodatqc%var(2)%vdep(ista:iend), & 966 & iv_indic) 967 CALL obs_int_z1d(kpk, iv_indic, k1dint, inum_obs, & 968 & prodatqc%var(2)%vdep(ista:iend), & 969 & zints(iin,ijn,:,jobs), & 970 & zobs2k,interp_corner(iin,ijn,:), & 971 & zgdept(iin,ijn,:,jobs), & 972 & zmask(iin,ijn,:,jobs) ) 972 973 973 974 ENDDO … … 995 996 996 997 l_zweig(iin,ijn,1) = & 997 & zweig(iin,ijn,1) *&998 & MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,jobs) ) &999 & - prodatqc%var(2)%vdep(iend)),0._wp)998 & zweig(iin,ijn,1) * & 999 & MAX( SIGN(1._wp,(zgdepw(iin,ijn,ik,jobs) ) & 1000 & - prodatqc%var(2)%vdep(iend)),0._wp) 1000 1001 1001 1002 EXIT depth_loop2 … … 1012 1013 1013 1014 1014 DEALLOCATE(interp_corner, v_indic)1015 DEALLOCATE(interp_corner,iv_indic) 1015 1016 1016 1017 ENDIF -
branches/2014/dev_r4650_UKMO14.4_OBS_GENERAL_VINTERP/NEMOGCM/NEMO/OPA_SRC/OBS/obs_prep.F90
r4817 r5106 1829 1829 ! Check if next to land 1830 1830 IF ( ANY( zgmsk(1:2,1:2,1,jobs) == 0.0_wp ) ) THEN 1831 ll_next_to_land=.TRUE.1831 ll_next_to_land=.TRUE. 1832 1832 ELSE 1833 ll_next_to_land=.FALSE.1833 ll_next_to_land=.FALSE. 1834 1834 ENDIF 1835 1835 … … 1879 1879 ! Or if it is within the mask 1880 1880 IF ( ALL( fsdepw(iig-1:iig+1,ijg-1:ijg+1,kpk) < pobsdep(jobsp) ) & 1881 & .OR. &1882 & ( SUM( zgmsk(1:2,1:2,kobsk(jobsp)-1:kobsk(jobsp),jobs) ) &1883 & == 0.0_wp) ) THEN1881 & .OR. & 1882 & ( SUM( zgmsk(1:2,1:2,kobsk(jobsp)-1:kobsk(jobsp),jobs) ) & 1883 & == 0.0_wp) ) THEN 1884 1884 kobsqc(jobsp) = kobsqc(jobsp) + 12 1885 1885 klanobs = klanobs + 1
Note: See TracChangeset
for help on using the changeset viewer.