7481
7482
7483
7485
7486
7487
7488 integer, intent(in) :: ng, model, msg, Tindex
7489# ifdef ADJUST_BOUNDARY
7490 integer, intent(in) :: IorJ, LBij, UBij
7491# endif
7492 integer, intent(in) :: LBi, UBi, LBj, UBj
7493
7494 integer, intent(inout) :: IniRec
7495
7496 TYPE(T_IO), intent(inout) :: S
7497
7498
7499
7500 logical :: Perfect2D, Perfect3D, foundit
7501# if defined ADJUST_BOUNDARY || \
7502 defined adjust_wstress || defined adjust_stflux
7503 logical :: get_adjust
7504# endif
7505 logical, dimension(NV) :: get_var, have_var
7506
7507 integer :: IDmod, InpRec, i, ifield, itrc, lstr, lend
7508 integer :: Nrec, mySize, nvatts, nvdim, status, vindex
7509 integer :: Vsize(4), start(4), total(4)
7510 integer(i8b) :: Fhash
7511
7512 real(dp), parameter :: Fscl = 1.0_r8
7513
7514 real(dp) :: INPtime, Tmax, my_dstart, scale, time_scale
7515 real(r8) :: Fmax, Fmin
7516
7517 real(dp), allocatable :: TimeVar(:)
7518
7519 character (len= 5) :: string
7520 character (len= 15) :: Tstring, attnam, tvarnam
7521 character (len= 22) :: t_code
7522 character (len= 40) :: tunits
7523 character (len=256) :: ncname
7524
7525 character (len=*), parameter :: MyFile = &
7526 & __FILE__//", get_state_pio"
7527
7528 TYPE (IO_Desc_t), pointer :: ioDesc
7529
7530 TYPE (file_desc_t) :: pioFile
7531 TYPE (Var_desc_t) :: pioVar
7532 TYPE (My_VarDesc) :: my_pioVar
7533
7534 sourcefile=myfile
7535
7536
7537
7538
7539
7540 ncname=trim(s%name)
7541
7542
7543
7544 IF (model.eq.inlm.or.(model.eq.0)) THEN
7545 string='NLM: '
7546 idmod=inlm
7547 ELSE IF (model.eq.itlm) THEN
7548 string='TLM: '
7549 idmod=itlm
7550 ELSE IF (model.eq.irpm) THEN
7551 string='RPM: '
7552 idmod=irpm
7553 ELSE IF (model.eq.iadm) THEN
7554 string='ADM: '
7555 idmod=iadm
7556 ELSE IF (model.eq.5) THEN
7557 string='NLM: '
7558 idmod=inlm
7559 ELSE IF (model.eq.6) THEN
7560 string='TLM: '
7561 idmod=itlm
7562 ELSE IF (model.eq.7) THEN
7563 string='FRC: '
7564 idmod=inlm
7565 ELSE IF (model.eq.8) THEN
7566 string='TLM: '
7567 idmod=itlm
7568 ELSE IF (model.eq.9) THEN
7569 string='NLM: '
7570 idmod=inlm
7571 ELSE IF (model.eq.10) THEN
7572 string='STD: '
7573 idmod=inlm
7574 ELSE IF (model.eq.11) THEN
7575 string='STD: '
7576 idmod=inlm
7577 ELSE IF (model.eq.12) THEN
7578 string='STD: '
7579 idmod=inlm
7580 ELSE IF (model.eq.13) THEN
7581 string='STD: '
7582 idmod=inlm
7583 ELSE IF (model.eq.14) THEN
7584 string='NRM: '
7585 idmod=inlm
7586 ELSE IF (model.eq.15) THEN
7587 string='NRM: '
7588 idmod=inlm
7589 ELSE IF (model.eq.16) THEN
7590 string='NRM: '
7591 idmod=inlm
7592 ELSE IF (model.eq.17) THEN
7593 string='NRM: '
7594 idmod=inlm
7595 END IF
7596
7597# ifdef PROFILE
7598
7599
7600
7601 CALL wclock_on (ng, idmod, 80, __line__, myfile)
7602# endif
7603
7604
7605
7606 perfect2d=.false.
7607 perfect3d=.false.
7608# ifdef PERFECT_RESTART
7609 IF (((model.eq.0).or.(model.eq.inlm)).and.(nrrec(ng).ne.0)) THEN
7610 perfect2d=.true.
7611 perfect3d=.true.
7612 END IF
7613# endif
7614 perfectrst(ng)=perfect2d.or.perfect3d
7615
7616
7617
7618
7619 DO i=1,4
7620 vsize(i)=0
7621 END DO
7622
7623
7624
7625
7626
7627
7628
7630 IF (founderror(exit_flag, noerror, __line__, myfile)) THEN
7631 IF (master) WRITE (stdout,10) string, trim(ncname)
7632 RETURN
7633 END IF
7634
7635
7636
7637 CALL checkvars (ng, model, ncname, piofile, string, nrec, nv, &
7638 & tvarnam, get_var, have_var)
7639 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7640 sourcefile=myfile
7641
7642# if defined DEBUGGING || defined NO_LBC_ATT
7643
7644
7645
7646 IF (((model.eq.0).or.(model.eq.inlm)).and.(nrrec(ng).ne.0)) THEN
7647 IF (master) WRITE (stdout,20) string, 'NLM_LBC', trim(ncname)
7648 END IF
7649# else
7650
7651
7652
7653
7654
7655 IF (((model.eq.0).or.(model.eq.inlm)).and.(nrrec(ng).ne.0)) THEN
7656 CALL lbc_getatt (ng, model, piofile, ncname, 'NLM_LBC', lbc)
7657 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7658 END IF
7659# endif
7660
7661
7662
7664 & piofile = piofile, &
7665 & myvarname = trim(tvarnam), &
7666 & piovar = piovar, &
7667 & nvardim = nvdim, &
7668 & nvaratt = nvatts)
7669 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7670
7671
7672
7673
7674
7675 mysize=var_dsize(1)
7676 IF (.not.allocated(timevar)) allocate (timevar(mysize))
7678 & rclock%DateNumber, timevar, &
7679 & piofile = piofile)
7680 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7681
7682
7683
7684
7685 IF (lastrec(ng)) THEN
7686 tmax=-1.0_r8
7687 DO i=1,mysize
7688 IF (timevar(i).gt.tmax) THEN
7689 tmax=timevar(i)
7690 inirec=i
7691 END IF
7692 END DO
7693 inptime=tmax
7694 inprec=inirec
7695 ELSE
7696 IF ((inirec.ne.0).and.(inirec.gt.mysize)) THEN
7697 IF (master) WRITE (stdout,30) string, inirec, trim(ncname), &
7698 & mysize
7699 exit_flag=2
7700 RETURN
7701 END IF
7702 IF (inirec.ne.0) THEN
7703 inprec=inirec
7704 ELSE
7705 inprec=1
7706 END IF
7707 inptime=timevar(inprec)
7708 END IF
7709 IF (allocated(timevar)) deallocate ( timevar )
7710
7711
7712
7713 time_scale=0.0_dp
7714 DO i=1,nvatts
7715 IF (trim(var_aname(i)).eq.'units') THEN
7716 IF (index(trim(var_achar(i)),'day').ne.0) THEN
7717 time_scale=day2sec
7718 ELSE IF (index(trim(var_achar(i)),'second').ne.0) THEN
7719 time_scale=1.0_dp
7720 END IF
7721 END IF
7722 END DO
7723 IF (time_scale.gt.0.0_r8) THEN
7724 inptime=inptime*time_scale
7725 END IF
7726
7727
7728
7729
7730
7731 IF ((model.eq.0).or.(model.eq.inlm).or. &
7732 & (model.eq.itlm).or.(model.eq.irpm)) THEN
7733# ifdef GENERIC_DSTART
7734 IF (initime(ng).lt.0.0_dp) THEN
7735 my_dstart=dstart
7736 ELSE
7737 my_dstart=initime(ng)/86400.0_dp
7738 END IF
7739 IF (((model.eq.itlm).or.(model.eq.irpm)).and.(msg.eq.1).and. &
7740 & (inptime.ne.(my_dstart*day2sec))) THEN
7741 inptime=my_dstart*day2sec
7742 END IF
7743# else
7744 IF (((model.eq.itlm).or.(model.eq.irpm)).and.(msg.eq.1).and. &
7745 & (inptime.ne.(dstart*day2sec))) THEN
7746 inptime=dstart*day2sec
7747 END IF
7748# endif
7749 IF (msg.eq.1) THEN
7750 time(ng)=inptime
7751 tdays(ng)=time(ng)*sec2day
7752 ntstart(ng)=nint((time(ng)-dstart*day2sec)/dt(ng))+1
7753 IF (ntstart(ng).lt.1) ntstart(ng)=1
7754 ntend(ng)=ntstart(ng)+ntimes(ng)-1
7755 IF (perfectrst(ng)) THEN
7756 ntfirst(ng)=1
7757 ELSE
7758 ntfirst(ng)=ntstart(ng)
7759 END IF
7760 END IF
7761# ifdef WEAK_CONSTRAINT
7762 IF (msg.eq.4) THEN
7763 forcetime(ng)=time(ng)
7764 END IF
7765# endif
7766 ELSE IF (model.eq.iadm) THEN
7767 IF ((msg.eq.1).and.(inptime.eq.0.0_r8)) THEN
7768 inptime=time(ng)
7769 ELSE IF (msg.ne.1) THEN
7770 time(ng)=inptime
7771 tdays(ng)=time(ng)*sec2day
7772 END IF
7773 ntstart(ng)=ntimes(ng)+1
7774 ntend(ng)=1
7775 ntfirst(ng)=ntend(ng)
7776 END IF
7777 CALL time_string (time(ng), time_code(ng))
7778
7779
7780
7781 IF (model.eq.inlm) THEN
7782 inirec=inprec
7783 END IF
7784
7785
7786
7787
7788
7789
7790
7791
7792 io_time=inptime
7793
7794
7795
7796 lstr=scan(ncname,'/',back=.true.)+1
7797 lend=len_trim(ncname)
7798 IF (master) THEN
7799 IF ((10.le.model).and.(model.le.17)) THEN
7800 t_code=' '
7801 ELSE
7802 CALL time_string (inptime, t_code)
7803 END IF
7804 WRITE (tstring,'(f15.4)') tdays(ng)
7805# if defined I4DVAR || defined I4DVAR_ANA_SENSITIVITY || \
7806 defined weak_constraint
7807 WRITE (stdout,40) string, trim(statemsg(msg)), &
7808 & t_code, ng, ', Outer=', outer, &
7809 & trim(adjustl(tstring)), ncname(lstr:lend), &
7810 & inprec, tindex
7811# else
7812 IF (erend.gt.erstr) THEN
7813 WRITE (stdout,40) string, trim(statemsg(msg)), &
7814 & t_code, ng, ', Iter=', nrun, &
7815 & trim(adjustl(tstring)), ncname(lstr:lend), &
7816 & inprec, tindex
7817 ELSE
7818 WRITE (stdout,50) string, trim(statemsg(msg)), &
7819 & t_code, ng, trim(adjustl(tstring)), &
7820 & ncname(lstr:lend), inprec, tindex
7821 END IF
7822# endif
7823 END IF
7824
7825# ifdef NONLINEAR
7826
7827
7828
7829
7830
7831
7832 nlm_state: IF ((model.eq.inlm).or.(model.eq.0)) THEN
7833
7834# ifdef PERFECT_RESTART
7835
7836
7837
7838 IF ((model.eq.0).and.(nrrec(ng).ne.0)) THEN
7839# ifdef SOLVE3D
7841 & 'nstp', nstp(ng:), &
7842 & piofile = piofile, &
7843 & start = (/inprec/), &
7844 & total = (/1/))
7845 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7846
7848 & 'nrhs', nrhs(ng:), &
7849 & piofile = piofile, &
7850 & start = (/inprec/), &
7851 & total = (/1/))
7852 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7853
7855 & 'nnew', nnew(ng:), &
7856 & piofile = piofile, &
7857 & start = (/inprec/), &
7858 & total = (/1/))
7859 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7860# endif
7862 & 'kstp', kstp(ng:), &
7863 & piofile = piofile, &
7864 & start = (/inprec/), &
7865 & total = (/1/))
7866 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7867
7869 & 'krhs', krhs(ng:), &
7870 & piofile = piofile, &
7871 & start = (/inprec/), &
7872 & total = (/1/))
7873 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7874
7876 & 'knew', knew(ng:), &
7877 & piofile = piofile, &
7878 & start = (/inprec/), &
7879 & total = (/1/))
7880 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
7881 END IF
7882# endif
7883# if defined SEDIMENT && defined SED_MORPH
7884
7885
7886
7887 IF (get_var(idbath)) THEN
7888 foundit=find_string(var_name, n_var, trim(vname(1,idbath)), &
7889 & vindex)
7890 IF (foundit) THEN
7892 my_piovar%gtype=r2dvar
7893 IF (kind(grid(ng)%h).eq.8) THEN
7894 my_piovar%dkind=pio_double
7896 ELSE
7897 my_piovar%dkind=pio_real
7899 END IF
7900
7901 status=nf_fread2d(ng, idmod, ncname, piofile, &
7902 & vname(1,idbath), my_piovar, &
7903 & inprec, iodesc, vsize, &
7904 & lbi, ubi, lbj, ubj, &
7905 & fscl, fmin, fmax, &
7906# ifdef MASKING
7907 & grid(ng) % rmask, &
7908# endif
7909# ifdef CHECKSUM
7910 & grid(ng) % h, &
7911 & checksum = fhash)
7912# else
7913 & grid(ng) % h)
7914# endif
7915 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
7916 IF (master) THEN
7917 WRITE (stdout,60) string, trim(vname(1,idbath)), &
7918 & inprec, trim(ncname)
7919 END IF
7920 exit_flag=2
7921 ioerror=status
7922 RETURN
7923 ELSE
7924 IF (master) THEN
7925# ifdef CHECKSUM
7926 WRITE (stdout,70) trim(vname(2,idbath)), fmin, fmax, &
7927 & fhash
7928# else
7929 WRITE (stdout,70) trim(vname(2,idbath)), fmin, fmax
7930# endif
7931
7932 END IF
7933 END IF
7934 ELSE
7935 IF (master) THEN
7936 WRITE (stdout,80) string, trim(vname(1,idbath)), &
7937 & trim(ncname)
7938 END IF
7939 exit_flag=4
7940 IF (founderror(exit_flag, pio_noerr, &
7941 & __line__, myfile)) THEN
7942 RETURN
7943 END IF
7944 END IF
7945 END IF
7946# endif
7947
7948
7949
7950 IF (get_var(idfsur)) THEN
7951 foundit=find_string(var_name, n_var, trim(vname(1,idfsur)), &
7952 & vindex)
7953 IF (foundit) THEN
7955 my_piovar%gtype=r2dvar
7956 IF (perfect2d) THEN
7957 IF (kind(ocean(ng)%zeta).eq.8) THEN
7958 my_piovar%dkind=pio_double
7960 ELSE
7961 my_piovar%dkind=pio_real
7963 END IF
7964
7965 status=nf_fread3d(ng, idmod, ncname, piofile, &
7966 & vname(1,idfsur), my_piovar, &
7967 & inprec, iodesc, vsize, &
7968 & lbi, ubi, lbj, ubj, 1, 3, &
7969 & fscl, fmin, fmax, &
7970# ifdef MASKING
7971 & grid(ng) % rmask, &
7972# endif
7973# ifdef CHECKSUM
7974 & ocean(ng) % zeta, &
7975 & checksum = fhash)
7976# else
7977 & ocean(ng) % zeta)
7978# endif
7979 ELSE
7980 IF (kind(ocean(ng)%zeta).eq.8) THEN
7981 my_piovar%dkind=pio_double
7983 ELSE
7984 my_piovar%dkind=pio_real
7986 END IF
7987
7988 status=nf_fread2d(ng, idmod, ncname, piofile, &
7989 & vname(1,idfsur), my_piovar, &
7990 & inprec, iodesc, vsize, &
7991 & lbi, ubi, lbj, ubj, &
7992 & fscl, fmin, fmax, &
7993# ifdef MASKING
7994 & grid(ng) % rmask, &
7995# endif
7996# ifdef CHECKSUM
7997 & ocean(ng) % zeta(:,:,tindex), &
7998 & checksum = fhash)
7999# else
8000 & ocean(ng) % zeta(:,:,tindex))
8001# endif
8002 END IF
8003 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8004 IF (master) THEN
8005 WRITE (stdout,60) string, trim(vname(1,idfsur)), &
8006 & inprec, trim(ncname)
8007 END IF
8008 exit_flag=2
8009 ioerror=status
8010 RETURN
8011 ELSE
8012 IF (master) THEN
8013# ifdef CHECKSUM
8014 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax, &
8015 & fhash
8016# else
8017 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax
8018# endif
8019
8020 END IF
8021 END IF
8022 ELSE
8023 IF (master) THEN
8024 WRITE (stdout,80) string, trim(vname(1,idfsur)), &
8025 & trim(ncname)
8026 END IF
8027 exit_flag=4
8028 IF (founderror(exit_flag, pio_noerr, &
8029 & __line__, myfile)) THEN
8030 RETURN
8031 END IF
8032 END IF
8033 END IF
8034
8035
8036
8037 IF (get_var(idrzet).and.perfect2d) THEN
8038 foundit=find_string(var_name, n_var, trim(vname(1,idrzet)), &
8039 & vindex)
8040 IF (foundit) THEN
8042 my_piovar%gtype=r2dvar
8043 IF (kind(ocean(ng)%rzeta).eq.8) THEN
8044 my_piovar%dkind=pio_double
8046 ELSE
8047 my_piovar%dkind=pio_real
8049 END IF
8050
8051 status=nf_fread3d(ng, idmod, ncname, piofile, &
8052 & vname(1,idrzet), my_piovar, &
8053 & inprec, iodesc, vsize, &
8054 & lbi, ubi, lbj, ubj, 1, 2, &
8055 & fscl, fmin, fmax, &
8056# ifdef MASKING
8057 & grid(ng) % rmask, &
8058# endif
8059# ifdef CHECKSUM
8060 & ocean(ng) % rzeta, &
8061 & checksum = fhash)
8062# else
8063 & ocean(ng) % rzeta)
8064# endif
8065 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8066 IF (master) THEN
8067 WRITE (stdout,60) string, trim(vname(1,idrzet)), &
8068 & inprec, trim(ncname)
8069 END IF
8070 exit_flag=2
8071 ioerror=status
8072 RETURN
8073 ELSE
8074 IF (master) THEN
8075# ifdef CHECKSUM
8076 WRITE (stdout,70) trim(vname(2,idrzet)), fmin, fmax, &
8077 & fhash
8078# else
8079 WRITE (stdout,70) trim(vname(2,idrzet)), fmin, fmax
8080# endif
8081
8082 END IF
8083 END IF
8084 ELSE
8085 IF (master) THEN
8086 WRITE (stdout,80) string, trim(vname(1,idrzet)), &
8087 & trim(ncname)
8088 END IF
8089 exit_flag=4
8090 IF (founderror(exit_flag, pio_noerr, &
8091 & __line__, myfile)) THEN
8092 RETURN
8093 END IF
8094 END IF
8095 END IF
8096
8097
8098
8099 IF (get_var(idubar)) THEN
8100 foundit=find_string(var_name, n_var, trim(vname(1,idubar)), &
8101 & vindex)
8102 IF (foundit) THEN
8104 my_piovar%gtype=u2dvar
8105 IF (perfect2d) THEN
8106 IF (kind(ocean(ng)%ubar).eq.8) THEN
8107 my_piovar%dkind=pio_double
8109 ELSE
8110 my_piovar%dkind=pio_real
8112 END IF
8113
8114 status=nf_fread3d(ng, idmod, ncname, piofile, &
8115 & vname(1,idubar), my_piovar, &
8116 & inprec, iodesc, vsize, &
8117 & lbi, ubi, lbj, ubj, 1, 3, &
8118 & fscl, fmin, fmax, &
8119# ifdef MASKING
8120 & grid(ng) % umask, &
8121# endif
8122# ifdef CHECKSUM
8123 & ocean(ng) % ubar, &
8124 & checksum = fhash)
8125# else
8126 & ocean(ng) % ubar)
8127# endif
8128 ELSE
8129 IF (kind(ocean(ng)%ubar).eq.8) THEN
8130 my_piovar%dkind=pio_double
8132 ELSE
8133 my_piovar%dkind=pio_real
8135 END IF
8136
8137 status=nf_fread2d(ng, idmod, ncname, piofile, &
8138 & vname(1,idubar), my_piovar, &
8139 & inprec, iodesc, vsize, &
8140 & lbi, ubi, lbj, ubj, &
8141 & fscl, fmin, fmax, &
8142# ifdef MASKING
8143 & grid(ng) % umask, &
8144# endif
8145# ifdef CHECKSUM
8146 & ocean(ng) % ubar(:,:,tindex), &
8147 & checksum = fhash)
8148# else
8149 & ocean(ng) % ubar(:,:,tindex))
8150# endif
8151 END IF
8152 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8153 IF (master) THEN
8154 WRITE (stdout,60) string, trim(vname(1,idubar)), &
8155 & inprec, trim(ncname)
8156 END IF
8157 exit_flag=2
8158 ioerror=status
8159 RETURN
8160 ELSE
8161 IF (master) THEN
8162# ifdef CHECKSUM
8163 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax, &
8164 & fhash
8165# else
8166 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax
8167# endif
8168
8169 END IF
8170 END IF
8171 ELSE
8172 IF (master) THEN
8173 WRITE (stdout,80) string, trim(vname(1,idubar)), &
8174 & trim(ncname)
8175 END IF
8176 exit_flag=4
8177 IF (founderror(exit_flag, pio_noerr, &
8178 & __line__, myfile)) THEN
8179 RETURN
8180 END IF
8181 END IF
8182 END IF
8183
8184
8185
8186 IF (get_var(idru2d).and.perfect2d) THEN
8187 foundit=find_string(var_name, n_var, trim(vname(1,idru2d)), &
8188 & vindex)
8189 IF (foundit) THEN
8191 my_piovar%gtype=u2dvar
8192 IF (kind(ocean(ng)%rubar).eq.8) THEN
8193 my_piovar%dkind=pio_double
8195 ELSE
8196 my_piovar%dkind=pio_real
8198 END IF
8199
8200 status=nf_fread3d(ng, idmod, ncname, piofile, &
8201 & vname(1,idru2d), my_piovar, &
8202 & inprec, iodesc, vsize, &
8203 & lbi, ubi, lbj, ubj, 1, 2, &
8204 & fscl, fmin, fmax, &
8205# ifdef MASKING
8206 & grid(ng) % umask, &
8207# endif
8208# ifdef CHECKSUM
8209 & ocean(ng) % rubar, &
8210 & checksum = fhash)
8211# else
8212 & ocean(ng) % rubar)
8213# endif
8214 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8215 IF (master) THEN
8216 WRITE (stdout,60) string, trim(vname(1,idru2d)), &
8217 & inprec, trim(ncname)
8218 END IF
8219 exit_flag=2
8220 ioerror=status
8221 RETURN
8222 ELSE
8223 IF (master) THEN
8224# ifdef CHECKSUM
8225 WRITE (stdout,70) trim(vname(2,idru2d)), fmin, fmax, &
8226 & fhash
8227# else
8228 WRITE (stdout,70) trim(vname(2,idru2d)), fmin, fmax
8229# endif
8230
8231 END IF
8232 END IF
8233 ELSE
8234 IF (master) THEN
8235 WRITE (stdout,80) string, trim(vname(1,idru2d)), &
8236 & trim(ncname)
8237 END IF
8238 exit_flag=4
8239 IF (founderror(exit_flag, pio_noerr, &
8240 & __line__, myfile)) THEN
8241 RETURN
8242 END IF
8243 END IF
8244 END IF
8245
8246
8247
8248 IF (get_var(idvbar)) THEN
8249 foundit=find_string(var_name, n_var, trim(vname(1,idvbar)), &
8250 & vindex)
8251 IF (foundit) THEN
8253 my_piovar%gtype=v2dvar
8254
8255 IF (perfect2d) THEN
8256 IF (kind(ocean(ng)%vbar).eq.8) THEN
8257 my_piovar%dkind=pio_double
8259 ELSE
8260 my_piovar%dkind=pio_real
8262 END IF
8263
8264 status=nf_fread3d(ng, idmod, ncname, piofile, &
8265 & vname(1,idvbar), my_piovar, &
8266 & inprec, iodesc, vsize, &
8267 & lbi, ubi, lbj, ubj, 1, 3, &
8268 & fscl, fmin, fmax, &
8269# ifdef MASKING
8270 & grid(ng) % vmask, &
8271# endif
8272# ifdef CHECKSUM
8273 & ocean(ng) % vbar, &
8274 & checksum = fhash)
8275# else
8276 & ocean(ng) % vbar)
8277# endif
8278 ELSE
8279 IF (kind(ocean(ng)%vbar).eq.8) THEN
8280 my_piovar%dkind=pio_double
8282 ELSE
8283 my_piovar%dkind=pio_real
8285 END IF
8286
8287 status=nf_fread2d(ng, idmod, ncname, piofile, &
8288 & vname(1,idvbar), my_piovar, &
8289 & inprec, iodesc, vsize, &
8290 & lbi, ubi, lbj, ubj, &
8291 & fscl, fmin, fmax, &
8292# ifdef MASKING
8293 & grid(ng) % vmask, &
8294# endif
8295# ifdef CHECKSUM
8296 & ocean(ng) % vbar(:,:,tindex), &
8297 & checksum = fhash)
8298# else
8299 & ocean(ng) % vbar(:,:,tindex))
8300# endif
8301 END IF
8302 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8303 IF (master) THEN
8304 WRITE (stdout,60) string, trim(vname(1,idvbar)), &
8305 & inprec, trim(ncname)
8306 END IF
8307 exit_flag=2
8308 ioerror=status
8309 RETURN
8310 ELSE
8311 IF (master) THEN
8312# ifdef CHECKSUM
8313 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax, &
8314 & fhash
8315# else
8316 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax
8317# endif
8318
8319 END IF
8320 END IF
8321 ELSE
8322 IF (master) THEN
8323 WRITE (stdout,80) string, trim(vname(1,idvbar)), &
8324 & trim(ncname)
8325 END IF
8326 exit_flag=4
8327 IF (founderror(exit_flag, pio_noerr, &
8328 & __line__, myfile)) THEN
8329 RETURN
8330 END IF
8331 END IF
8332 END IF
8333
8334
8335
8336 IF (get_var(idrv2d).and.perfect2d) THEN
8337 foundit=find_string(var_name, n_var, trim(vname(1,idrv2d)), &
8338 & vindex)
8339 IF (foundit) THEN
8341 my_piovar%gtype=v2dvar
8342 IF (kind(ocean(ng)%rvbar).eq.8) THEN
8343 my_piovar%dkind=pio_double
8345 ELSE
8346 my_piovar%dkind=pio_real
8348 END IF
8349
8350 status=nf_fread3d(ng, idmod, ncname, piofile, &
8351 & vname(1,idrv2d), my_piovar, &
8352 & inprec, iodesc, vsize, &
8353 & lbi, ubi, lbj, ubj, 1, 2, &
8354 & fscl, fmin, fmax, &
8355# ifdef MASKING
8356 & grid(ng) % vmask, &
8357# endif
8358# ifdef CHECKSUM
8359 & ocean(ng) % rvbar, &
8360 & checksum = fhash)
8361# else
8362 & ocean(ng) % rvbar)
8363# endif
8364 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8365 IF (master) THEN
8366 WRITE (stdout,60) string, trim(vname(1,idrv2d)), &
8367 & inprec, trim(ncname)
8368 END IF
8369 exit_flag=2
8370 ioerror=status
8371 RETURN
8372 ELSE
8373 IF (master) THEN
8374# ifdef CHECKSUM
8375 WRITE (stdout,70) trim(vname(2,idrv2d)), fmin, fmax, &
8376 & fhash
8377# else
8378 WRITE (stdout,70) trim(vname(2,idrv2d)), fmin, fmax
8379# endif
8380
8381 END IF
8382 END IF
8383 ELSE
8384 IF (master) THEN
8385 WRITE (stdout,80) string, trim(vname(1,idrv2d)), &
8386 & trim(ncname)
8387 END IF
8388 exit_flag=4
8389 IF (founderror(exit_flag, pio_noerr, &
8390 & __line__, myfile)) THEN
8391 RETURN
8392 END IF
8393 END IF
8394 END IF
8395
8396# ifdef SOLVE3D
8397
8398
8399
8400 IF (get_var(iduvel)) THEN
8401 foundit=find_string(var_name, n_var, trim(vname(1,iduvel)), &
8402 & vindex)
8403 IF (foundit) THEN
8405 my_piovar%gtype=u3dvar
8406 IF (perfect3d) THEN
8407 IF (kind(ocean(ng)%u).eq.8) THEN
8408 my_piovar%dkind=pio_double
8410 ELSE
8411 my_piovar%dkind=pio_real
8413 END IF
8414
8415 status=nf_fread4d(ng, idmod, ncname, piofile, &
8416 & vname(1,iduvel), my_piovar, &
8417 & inprec, iodesc, vsize, &
8418 & lbi, ubi, lbj, ubj, 1, n(ng), 1, 2, &
8419 & fscl, fmin, fmax, &
8420# ifdef MASKING
8421 & grid(ng) % umask, &
8422# endif
8423# ifdef CHECKSUM
8424 & ocean(ng) % u, &
8425 & checksum = fhash)
8426# else
8427 & ocean(ng) % u)
8428# endif
8429 ELSE
8430 IF (kind(ocean(ng)%u).eq.8) THEN
8431 my_piovar%dkind=pio_double
8433 ELSE
8434 my_piovar%dkind=pio_real
8436 END IF
8437
8438 status=nf_fread3d(ng, idmod, ncname, piofile, &
8439 & vname(1,iduvel), my_piovar, &
8440 & inprec, iodesc, vsize, &
8441 & lbi, ubi, lbj, ubj, 1, n(ng), &
8442 & fscl, fmin, fmax, &
8443# ifdef MASKING
8444 & grid(ng) % umask, &
8445# endif
8446# ifdef CHECKSUM
8447 & ocean(ng) % u(:,:,:,tindex), &
8448 & checksum = fhash)
8449# else
8450 & ocean(ng) % u(:,:,:,tindex))
8451# endif
8452 END IF
8453 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8454 IF (master) THEN
8455 WRITE (stdout,60) string, trim(vname(1,iduvel)), &
8456 & inprec, trim(ncname)
8457 END IF
8458 exit_flag=2
8459 ioerror=status
8460 RETURN
8461 ELSE
8462 IF (master) THEN
8463# ifdef CHECKSUM
8464 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax, &
8465 & fhash
8466# else
8467 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax
8468# endif
8469 END IF
8470 END IF
8471 ELSE
8472 IF (master) THEN
8473 WRITE (stdout,80) string, trim(vname(1,iduvel)), &
8474 & trim(ncname)
8475 END IF
8476 exit_flag=4
8477 IF (founderror(exit_flag, pio_noerr, &
8478 & __line__, myfile)) THEN
8479 RETURN
8480 END IF
8481 END IF
8482 END IF
8483
8484
8485
8486 IF (get_var(idru3d).and.perfect3d) THEN
8487 foundit=find_string(var_name, n_var, trim(vname(1,idru3d)), &
8488 & vindex)
8489 IF (foundit) THEN
8491 my_piovar%gtype=u3dvar
8492 IF (kind(ocean(ng)%ru).eq.8) THEN
8493 my_piovar%dkind=pio_double
8495 ELSE
8496 my_piovar%dkind=pio_real
8498 END IF
8499
8500 status=nf_fread4d(ng, idmod, ncname, piofile, &
8501 & vname(1,idru3d), my_piovar, &
8502 & inprec, iodesc, vsize, &
8503 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, &
8504 & fscl, fmin, fmax, &
8505# ifdef MASKING
8506 & grid(ng) % umask, &
8507# endif
8508# ifdef CHECKSUM
8509 & ocean(ng) % ru, &
8510 & checksum = fhash)
8511# else
8512 & ocean(ng) % ru)
8513# endif
8514 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8515 IF (master) THEN
8516 WRITE (stdout,60) string, trim(vname(1,idru3d)), &
8517 & inprec, trim(ncname)
8518 END IF
8519 exit_flag=2
8520 ioerror=status
8521 RETURN
8522 ELSE
8523 IF (master) THEN
8524# ifdef CHECKSUM
8525 WRITE (stdout,70) trim(vname(2,idru3d)), fmin, fmax, &
8526 & fhash
8527# else
8528 WRITE (stdout,70) trim(vname(2,idru3d)), fmin, fmax
8529# endif
8530 END IF
8531 END IF
8532 ELSE
8533 IF (master) THEN
8534 WRITE (stdout,80) string, trim(vname(1,idru3d)), &
8535 & trim(ncname)
8536 END IF
8537 exit_flag=4
8538 IF (founderror(exit_flag, pio_noerr, &
8539 & __line__, myfile)) THEN
8540 RETURN
8541 END IF
8542 END IF
8543 END IF
8544
8545
8546
8547 IF (get_var(idvvel)) THEN
8548 foundit=find_string(var_name, n_var, trim(vname(1,idvvel)), &
8549 & vindex)
8550 IF (foundit) THEN
8552 my_piovar%gtype=v3dvar
8553 IF (perfect3d) THEN
8554 IF (kind(ocean(ng)%v).eq.8) THEN
8555 my_piovar%dkind=pio_double
8557 ELSE
8558 my_piovar%dkind=pio_real
8560 END IF
8561
8562 status=nf_fread4d(ng, idmod, ncname, piofile, &
8563 & vname(1,idvvel), my_piovar, &
8564 & inprec, iodesc, vsize, &
8565 & lbi, ubi, lbj, ubj, 1, n(ng), 1, 2, &
8566 & fscl, fmin, fmax, &
8567# ifdef MASKING
8568 & grid(ng) % vmask, &
8569# endif
8570# ifdef CHECKSUM
8571 & ocean(ng) % v, &
8572 & checksum = fhash)
8573# else
8574 & ocean(ng) % v)
8575# endif
8576 ELSE
8577 IF (kind(ocean(ng)%v).eq.8) THEN
8578 my_piovar%dkind=pio_double
8580 ELSE
8581 my_piovar%dkind=pio_real
8583 END IF
8584
8585 status=nf_fread3d(ng, idmod, ncname, piofile, &
8586 & vname(1,idvvel), my_piovar, &
8587 & inprec, iodesc, vsize, &
8588 & lbi, ubi, lbj, ubj, 1, n(ng), &
8589 & fscl, fmin, fmax, &
8590# ifdef MASKING
8591 & grid(ng) % vmask, &
8592# endif
8593# ifdef CHECKSUM
8594 & ocean(ng) % v(:,:,:,tindex), &
8595 & checksum = fhash)
8596# else
8597 & ocean(ng) % v(:,:,:,tindex))
8598# endif
8599 END IF
8600 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8601 IF (master) THEN
8602 WRITE (stdout,60) string, trim(vname(1,idvvel)), &
8603 & inprec, trim(ncname)
8604 END IF
8605 exit_flag=2
8606 ioerror=status
8607 RETURN
8608 ELSE
8609 IF (master) THEN
8610# ifdef CHECKSUM
8611 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax, &
8612 & fhash
8613# else
8614 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax
8615# endif
8616
8617 END IF
8618 END IF
8619 ELSE
8620 IF (master) THEN
8621 WRITE (stdout,80) string, trim(vname(1,idvvel)), &
8622 & trim(ncname)
8623 END IF
8624 exit_flag=4
8625 IF (founderror(exit_flag, pio_noerr, &
8626 & __line__, myfile)) THEN
8627 RETURN
8628 END IF
8629 END IF
8630 END IF
8631
8632
8633
8634 IF (get_var(idrv3d).and.perfect3d) THEN
8635 foundit=find_string(var_name, n_var, trim(vname(1,idrv3d)), &
8636 & vindex)
8637 IF (foundit) THEN
8640 my_piovar%gtype=v3dvar
8641 IF (kind(ocean(ng)%rv).eq.8) THEN
8642 my_piovar%dkind=pio_double
8644 ELSE
8645 my_piovar%dkind=pio_real
8647 END IF
8648
8649 status=nf_fread4d(ng, idmod, ncname, piofile, &
8650 & vname(1,idrv3d), my_piovar, &
8651 & inprec, iodesc, vsize, &
8652 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, &
8653 & fscl, fmin, fmax, &
8654# ifdef MASKING
8655 & grid(ng) % vmask, &
8656# endif
8657# ifdef CHECKSUM
8658 & ocean(ng) % rv, &
8659 & checksum = fhash)
8660# else
8661 & ocean(ng) % rv)
8662# endif
8663 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8664 IF (master) THEN
8665 WRITE (stdout,60) string, trim(vname(1,idrv3d)), &
8666 & inprec, trim(ncname)
8667 END IF
8668 exit_flag=2
8669 ioerror=status
8670 RETURN
8671 ELSE
8672 IF (master) THEN
8673# ifdef CHECKSUM
8674 WRITE (stdout,70) trim(vname(2,idrv3d)), fmin, fmax, &
8675 & fhash
8676# else
8677 WRITE (stdout,70) trim(vname(2,idrv3d)), fmin, fmax
8678# endif
8679
8680 END IF
8681 END IF
8682 ELSE
8683 IF (master) THEN
8684 WRITE (stdout,80) string, trim(vname(1,idrv3d)), &
8685 & trim(ncname)
8686 END IF
8687 exit_flag=4
8688 IF (founderror(exit_flag, pio_noerr, &
8689 & __line__, myfile)) THEN
8690 RETURN
8691 END IF
8692 END IF
8693 END IF
8694
8695
8696
8697 DO itrc=1,nt(ng)
8698 IF (get_var(idtvar(itrc))) THEN
8699 foundit=find_string(var_name, n_var, &
8700 & trim(vname(1,idtvar(itrc))), vindex)
8701 IF (foundit) THEN
8703 my_piovar%gtype=r3dvar
8704 IF (perfect3d) THEN
8705 IF (kind(ocean(ng)%u).eq.8) THEN
8706 my_piovar%dkind=pio_double
8708 ELSE
8709 my_piovar%dkind=pio_real
8711 END IF
8712
8713 status=nf_fread4d(ng, idmod, ncname, piofile, &
8714 & vname(1,idtvar(itrc)), my_piovar, &
8715 & inprec, iodesc, vsize, &
8716 & lbi, ubi, lbj, ubj, 1, n(ng), 1, 2, &
8717 & fscl, fmin, fmax, &
8718# ifdef MASKING
8719 & grid(ng) % rmask, &
8720# endif
8721# ifdef CHECKSUM
8722 & ocean(ng) % t(:,:,:,:,itrc), &
8723 & checksum = fhash)
8724# else
8725 & ocean(ng) % t(:,:,:,:,itrc))
8726# endif
8727 ELSE
8728 IF (kind(ocean(ng)%t).eq.8) THEN
8729 my_piovar%dkind=pio_double
8731 ELSE
8732 my_piovar%dkind=pio_real
8734 END IF
8735
8736 status=nf_fread3d(ng, idmod, ncname, piofile, &
8737 & vname(1,idtvar(itrc)), my_piovar, &
8738 & inprec, iodesc, vsize, &
8739 & lbi, ubi, lbj, ubj, 1, n(ng), &
8740 & fscl, fmin, fmax, &
8741# ifdef MASKING
8742 & grid(ng) % rmask, &
8743# endif
8744# ifdef CHECKSUM
8745 & ocean(ng) % t(:,:,:,tindex,itrc), &
8746 & checksum = fhash)
8747# else
8748 & ocean(ng) % t(:,:,:,tindex,itrc))
8749# endif
8750 END IF
8751 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8752 IF (master) THEN
8753 WRITE (stdout,60) string, trim(vname(1,idtvar(itrc))),&
8754 & inprec, trim(ncname)
8755 END IF
8756 exit_flag=2
8757 ioerror=status
8758 RETURN
8759 ELSE
8760 IF (master) THEN
8761# ifdef CHECKSUM
8762 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
8763 & fmin, fmax, fhash
8764# else
8765 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
8766 & fmin, fmax
8767# endif
8768 END IF
8769 END IF
8770 ELSE
8771 IF (master) THEN
8772 WRITE (stdout,80) string, trim(vname(1,idtvar(itrc))), &
8773 & trim(ncname)
8774 END IF
8775 exit_flag=4
8776 IF (founderror(exit_flag, pio_noerr, &
8777 & __line__, myfile)) THEN
8778 RETURN
8779 END IF
8780 END IF
8781 END IF
8782 END DO
8783
8784# if defined GLS_MIXING || defined MY25_MIXING || defined LMD_MIXING
8785
8786
8787
8788 IF (have_var(idvvis)) THEN
8789 foundit=find_string(var_name, n_var, trim(vname(1,idvvis)), &
8790 & vindex)
8791 IF (foundit) THEN
8793 my_piovar%gtype=w3dvar
8794 IF (kind(mixing(ng)%AKv).eq.8) THEN
8795 my_piovar%dkind=pio_double
8797 ELSE
8798 my_piovar%dkind=pio_real
8800 END IF
8801
8802 status=nf_fread3d(ng, idmod, ncname, piofile, &
8803 & vname(1,idvvis), my_piovar, &
8804 & inprec, iodesc, vsize, &
8805 & lbi, ubi, lbj, ubj, 0, n(ng), &
8806 & fscl, fmin,fmax, &
8807# ifdef MASKING
8808 & grid(ng) % rmask, &
8809# endif
8810# ifdef CHECKSUM
8811 & mixing(ng) % AKv, &
8812 & checksum = fhash)
8813# else
8814 & mixing(ng) % AKv)
8815# endif
8816 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8817 IF (master) THEN
8818 WRITE (stdout,60) string, trim(vname(1,idvvis)), &
8819 & inprec, trim(ncname)
8820 END IF
8821 exit_flag=2
8822 ioerror=status
8823 RETURN
8824 ELSE
8825 IF (master) THEN
8826# ifdef CHECKSUM
8827 WRITE (stdout,70) trim(vname(2,idvvis)), fmin, fmax, &
8828 & fhash
8829# else
8830 WRITE (stdout,70) trim(vname(2,idvvis)), fmin, fmax
8831# endif
8832
8833 END IF
8834 END IF
8835# ifdef DISTRIBUTE
8836 CALL mp_exchange3d (ng, myrank, idmod, 1, &
8837 & lbi, ubi, lbj, ubj, 0, n(ng), &
8838 & nghostpoints, &
8839 & ewperiodic(ng), nsperiodic(ng), &
8840 & mixing(ng) % AKv)
8841# endif
8842 ELSE
8843 IF (master) THEN
8844 WRITE (stdout,80) string, trim(vname(1,idvvis)), &
8845 & trim(ncname)
8846 END IF
8847 exit_flag=4
8848 IF (founderror(exit_flag, pio_noerr, &
8849 & __line__, myfile)) THEN
8850 RETURN
8851 END IF
8852 END IF
8853 END IF
8854
8855
8856
8857 IF (have_var(idtdif)) THEN
8858 foundit=find_string(var_name, n_var, trim(vname(1,idtdif)), &
8859 & vindex)
8860 IF (foundit) THEN
8862 my_piovar%gtype=w3dvar
8863 IF (kind(mixing(ng)%AKt).eq.8) THEN
8864 my_piovar%dkind=pio_double
8866 ELSE
8867 my_piovar%dkind=pio_real
8869 END IF
8870
8871 status=nf_fread3d(ng, idmod, ncname, piofile, &
8872 & vname(1,idtdif), my_piovar, &
8873 & inprec, iodesc, vsize, &
8874 & lbi, ubi, lbj, ubj, 0, n(ng), &
8875 & fscl, fmin,fmax, &
8876# ifdef MASKING
8877 & grid(ng) % rmask, &
8878# endif
8879# ifdef CHECKSUM
8880 & mixing(ng) % AKt(:,:,:,itemp), &
8881 & checksum = fhash)
8882# else
8883 & mixing(ng) % AKt(:,:,:,itemp))
8884# endif
8885 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8886 IF (master) THEN
8887 WRITE (stdout,60) string, trim(vname(1,idtdif)), &
8888 & inprec, trim(ncname)
8889 END IF
8890 exit_flag=2
8891 ioerror=status
8892 RETURN
8893 ELSE
8894 IF (master) THEN
8895# ifdef CHECKSUM
8896 WRITE (stdout,70) trim(vname(2,idtdif)), fmin, fmax, &
8897 & fhash
8898# else
8899 WRITE (stdout,70) trim(vname(2,idtdif)), fmin, fmax
8900# endif
8901
8902 END IF
8903 END IF
8904# ifdef DISTRIBUTE
8905 CALL mp_exchange3d (ng, myrank, idmod, 1, &
8906 & lbi, ubi, lbj, ubj, 0, n(ng), &
8907 & nghostpoints, &
8908 & ewperiodic(ng), nsperiodic(ng), &
8909 & mixing(ng) % AKt(:,:,:,itemp))
8910# endif
8911 ELSE
8912 IF (master) THEN
8913 WRITE (stdout,80) string, trim(vname(1,idtdif)), &
8914 & trim(ncname)
8915 END IF
8916 exit_flag=4
8917 IF (founderror(exit_flag, pio_noerr, &
8918 & __line__, myfile)) THEN
8919 RETURN
8920 END IF
8921 END IF
8922 END IF
8923
8924# ifdef SALINITY
8925
8926
8927
8928 IF (have_var(idsdif)) THEN
8929 foundit=find_string(var_name, n_var, trim(vname(1,idsdif)), &
8930 & vindex)
8931 IF (foundit) THEN
8933 my_piovar%gtype=w3dvar
8934 IF (kind(mixing(ng)%AKt).eq.8) THEN
8935 my_piovar%dkind=pio_double
8937 ELSE
8938 my_piovar%dkind=pio_real
8940 END IF
8941
8942 status=nf_fread3d(ng, idmod, ncname, piofile, &
8943 & vname(1,idsdif), my_piovar, &
8944 & inprec, iodesc, vsize, &
8945 & lbi, ubi, lbj, ubj, 0, n(ng), &
8946 & fscl, fmin,fmax, &
8947# ifdef MASKING
8948 & grid(ng) % rmask, &
8949# endif
8950# ifdef CHECKSUM
8951 & mixing(ng) % AKt(:,:,:,isalt), &
8952 & checksum = fhash)
8953# else
8954 & mixing(ng) % AKt(:,:,:,isalt))
8955# endif
8956 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
8957 IF (master) THEN
8958 WRITE (stdout,60) string, trim(vname(1,idsdif)), &
8959 & inprec, trim(ncname)
8960 END IF
8961 exit_flag=2
8962 ioerror=status
8963 RETURN
8964 ELSE
8965 IF (master) THEN
8966# ifdef CHECKSUM
8967 WRITE (stdout,70) trim(vname(2,idsdif)), fmin, fmax, &
8968 & fhash
8969# else
8970 WRITE (stdout,70) trim(vname(2,idsdif)), fmin, fmax
8971# endif
8972
8973 END IF
8974 END IF
8975# ifdef DISTRIBUTE
8976 CALL mp_exchange3d (ng, myrank, idmod, 1, &
8977 & lbi, ubi, lbj, ubj, 0, n(ng), &
8978 & nghostpoints, &
8979 & ewperiodic(ng), nsperiodic(ng), &
8980 & mixing(ng) % AKt(:,:,:,isalt))
8981# endif
8982 ELSE
8983 IF (master) THEN
8984 WRITE (stdout,80) string, trim(vname(1,idsdif)), &
8985 & trim(ncname)
8986 END IF
8987 exit_flag=4
8988 IF (founderror(exit_flag, pio_noerr, &
8989 & __line__, myfile)) THEN
8990 RETURN
8991 END IF
8992 END IF
8993 END IF
8994# endif
8995# endif
8996# if defined LMD_SKPP
8997
8998
8999
9000 IF (have_var(idhsbl).and.perfect3d) THEN
9001 foundit=find_string(var_name, n_var, trim(vname(1,idhsbl)), &
9002 & vindex)
9003 IF (foundit) THEN
9006 my_piovar%gtype=r2dvar
9007 IF (kind(mixing(ng)%Hsbl).eq.8) THEN
9008 my_piovar%dkind=pio_double
9010 ELSE
9011 my_piovar%dkind=pio_real
9013 END IF
9014
9015 status=nf_fread2d(ng, idmod, ncname, piofile, &
9016 & vname(1,idhsbl), my_piovar, &
9017 & inprec, iodesc, vsize, &
9018 & lbi, ubi, lbj, ubj, &
9019 & fscl, fmin, fmax, &
9020# ifdef MASKING
9021 & grid(ng) % rmask, &
9022# endif
9023# ifdef CHECKSUM
9024 & mixing(ng) % Hsbl, &
9025 & checksum = fhash)
9026# else
9027 & mixing(ng) % Hsbl)
9028# endif
9029 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9030 IF (master) THEN
9031 WRITE (stdout,60) string, trim(vname(1,idhsbl)), &
9032 & inprec, trim(ncname)
9033 END IF
9034 exit_flag=2
9035 ioerror=status
9036 RETURN
9037 ELSE
9038 IF (master) THEN
9039# ifdef CHECKSUM
9040 WRITE (stdout,70) trim(vname(2,idhsbl)), fmin, fmax, &
9041 & fhash
9042# else
9043 WRITE (stdout,70) trim(vname(2,idhsbl)), fmin, fmax
9044# endif
9045
9046 END IF
9047 END IF
9048 ELSE
9049 IF (master) THEN
9050 WRITE (stdout,80) string, trim(vname(1,idhsbl)), &
9051 & trim(ncname)
9052 END IF
9053 exit_flag=4
9054 IF (founderror(exit_flag, pio_noerr, &
9055 & __line__, myfile)) THEN
9056 RETURN
9057 END IF
9058 END IF
9059 END IF
9060# endif
9061# if defined LMD_BKPP
9062
9063
9064
9065 IF (have_var(idhbbl).and.perfect3d) THEN
9066 foundit=find_string(var_name, n_var, trim(vname(1,idhbbl)), &
9067 & vindex)
9068 IF (foundit) THEN
9071 my_piovar%gtype=r2dvar
9072 IF (kind(mixing(ng)%Hbbl).eq.8) THEN
9073 my_piovar%dkind=pio_double
9075 ELSE
9076 my_piovar%dkind=pio_real
9078 END IF
9079
9080 status=nf_fread2d(ng, idmod, ncname, piofile, &
9081 & vname(1,idhbbl), my_piovar, &
9082 & inprec, iodesc, vsize, &
9083 & lbi, ubi, lbj, ubj, &
9084 & fscl, fmin, fmax, &
9085# ifdef MASKING
9086 & grid(ng) % rmask, &
9087# endif
9088# ifdef CHECKSUM
9089 & mixing(ng) % Hbbl, &
9090 & checksum = fhash)
9091# else
9092 & mixing(ng) % Hbbl)
9093# endif
9094 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9095 IF (master) THEN
9096 WRITE (stdout,60) string, trim(vname(1,idhbbl)), &
9097 & inprec, trim(ncname)
9098 END IF
9099 exit_flag=2
9100 ioerror=status
9101 RETURN
9102 ELSE
9103 IF (master) THEN
9104# ifdef CHECKSUM
9105 WRITE (stdout,70) trim(vname(2,idhbbl)), fmin, fmax, &
9106 & fhash
9107# else
9108 WRITE (stdout,70) trim(vname(2,idhbbl)), fmin, fmax
9109# endif
9110
9111 END IF
9112 END IF
9113 ELSE
9114 IF (master) THEN
9115 WRITE (stdout,80) string, trim(vname(1,idhbbl)), &
9116 & trim(ncname)
9117 END IF
9118 exit_flag=4
9119 IF (founderror(exit_flag, pio_noerr, &
9120 & __line__, myfile)) THEN
9121 RETURN
9122 END IF
9123 END IF
9124 END IF
9125# endif
9126# if defined LMD_NONLOCAL && defined PERFECT_RESTART
9127
9128
9129
9130 DO itrc=1,nat
9131 IF (have_var(idghat(itrc))) THEN
9132 foundit=find_string(var_name, n_var, &
9133 & trim(vname(1,idghat(itrc))), vindex)
9134 IF (foundit) THEN
9136 my_piovar%gtype=w3dvar
9137 IF (kind(mixing(ng)%Ghats).eq.8) THEN
9138 my_piovar%dkind=pio_double
9140 ELSE
9141 my_piovar%dkind=pio_real
9143 END IF
9144
9145 status=nf_fread3d(ng, idmod, ncname, piofile, &
9146 & vname(1,idghat(itrc)), my_piovar, &
9147 & inprec, iodesc, vsize, &
9148 & lbi, ubi, lbj, ubj, 0, n(ng), &
9149 & fscl, fmin,fmax, &
9150# ifdef MASKING
9151 & grid(ng) % rmask, &
9152# endif
9153# ifdef CHECKSUM
9154 & mixing(ng) % Ghats(:,:,:,itrc), &
9155 & checksum = fhash)
9156# else
9157 & mixing(ng) % Ghats(:,:,:,itrc))
9158# endif
9159 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9160 IF (master) THEN
9161 WRITE (stdout,60) string, trim(vname(1,idghat(itrc))), &
9162 & inprec, trim(ncname)
9163 END IF
9164 exit_flag=2
9165 ioerror=status
9166 RETURN
9167 ELSE
9168 IF (master) THEN
9169# ifdef CHECKSUM
9170 WRITE (stdout,70) trim(vname(2,idghat(itrc))), &
9171 & fmin, fmax, fhash
9172# else
9173 WRITE (stdout,70) trim(vname(2,idghat(itrc))), &
9174 & fmin, fmax
9175# endif
9176 END IF
9177 END IF
9178 ELSE
9179 IF (master) THEN
9180 WRITE (stdout,80) string, trim(vname(1,idghat(itrc))), &
9181 & trim(ncname)
9182 END IF
9183 exit_flag=4
9184 IF (founderror(exit_flag, pio_noerr, &
9185 & __line__, myfile)) THEN
9186 RETURN
9187 END IF
9188 END IF
9189 END IF
9190 END DO
9191# endif
9192# if defined GLS_MIXING || defined MY25_MIXING
9193
9194
9195
9196 IF (get_var(idmtke).and.perfect3d) THEN
9197 foundit=find_string(var_name, n_var, trim(vname(1,idmtke)), &
9198 & vindex)
9199 IF (foundit) THEN
9202 my_piovar%gtype=w3dvar
9203 IF (kind(mixing(ng)%tke).eq.8) THEN
9204 my_piovar%dkind=pio_double
9206 ELSE
9207 my_piovar%dkind=pio_real
9209 END IF
9210
9211 status=nf_fread4d(ng, idmod, ncname, piofile, &
9212 & vname(1,idmtke), my_piovar, &
9213 & inprec, iodesc, vsize, &
9214 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, &
9215 & fscl, fmin, fmax, &
9216# ifdef MASKING
9217 & grid(ng) % rmask, &
9218# endif
9219# ifdef CHECKSUM
9220 & mixing(ng) % tke, &
9221 & checksum = fhash)
9222# else
9223 & mixing(ng) % tke)
9224# endif
9225 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9226 IF (master) THEN
9227 WRITE (stdout,60) string, trim(vname(1,idmtke)), &
9228 & inprec, trim(ncname)
9229 END IF
9230 exit_flag=2
9231 ioerror=status
9232 RETURN
9233 ELSE
9234 IF (master) THEN
9235# ifdef CHECKSUM
9236 WRITE (stdout,70) trim(vname(2,idmtke)), fmin, fmax, &
9237 & fhash
9238# else
9239 WRITE (stdout,70) trim(vname(2,idmtke)), fmin, fmax
9240# endif
9241
9242 END IF
9243 END IF
9244 ELSE
9245 IF (master) THEN
9246 WRITE (stdout,80) string, trim(vname(1,idmtke)), &
9247 & trim(ncname)
9248 END IF
9249 exit_flag=4
9250 IF (founderror(exit_flag, pio_noerr, &
9251 & __line__, myfile)) THEN
9252 RETURN
9253 END IF
9254 END IF
9255 END IF
9256
9257
9258
9259 IF (get_var(idmtls).and.perfect3d) THEN
9260 foundit=find_string(var_name, n_var, trim(vname(1,idmtls)), &
9261 & vindex)
9262 IF (foundit) THEN
9264 my_piovar%gtype=w3dvar
9265 IF (kind(mixing(ng)%gls).eq.8) THEN
9266 my_piovar%dkind=pio_double
9268 ELSE
9269 my_piovar%dkind=pio_real
9271 END IF
9272
9273 status=nf_fread4d(ng, idmod, ncname, piofile, &
9274 & vname(1,idmtls), my_piovar, &
9275 & inprec, iodesc, vsize, &
9276 & lbi, ubi, lbj, ubj, 0, n(ng), 1, 2, &
9277 & fscl, fmin, fmax, &
9278# ifdef MASKING
9279 & grid(ng) % rmask, &
9280# endif
9281# ifdef CHECKSUM
9282 & mixing(ng) % gls, &
9283 & checksum = fhash)
9284# else
9285 & mixing(ng) % gls)
9286# endif
9287 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9288 IF (master) THEN
9289 WRITE (stdout,60) string, trim(vname(1,idmtls)), &
9290 & inprec, trim(ncname)
9291 END IF
9292 exit_flag=2
9293 ioerror=status
9294 RETURN
9295 ELSE
9296 IF (master) THEN
9297# ifdef CHECKSUM
9298 WRITE (stdout,70) trim(vname(2,idmtls)), fmin, fmax, &
9299 & fhash
9300# else
9301 WRITE (stdout,70) trim(vname(2,idmtls)), fmin, fmax
9302# endif
9303
9304 END IF
9305 END IF
9306 ELSE
9307 IF (master) THEN
9308 WRITE (stdout,80) string, trim(vname(1,idmtls)), &
9309 & trim(ncname)
9310 END IF
9311 exit_flag=4
9312 IF (founderror(exit_flag, pio_noerr, &
9313 & __line__, myfile)) THEN
9314 RETURN
9315 END IF
9316 END IF
9317 END IF
9318
9319
9320
9321 IF (get_var(idvmls).and.perfect3d) THEN
9322 foundit=find_string(var_name, n_var, trim(vname(1,idvmls)), &
9323 & vindex)
9324 IF (foundit) THEN
9327 my_piovar%gtype=w3dvar
9328 IF (kind(mixing(ng)%Lscale).eq.8) THEN
9329 my_piovar%dkind=pio_double
9331 ELSE
9332 my_piovar%dkind=pio_real
9334 END IF
9335
9336 status=nf_fread3d(ng, idmod, ncname, piofile, &
9337 & vname(1,idvmls), my_piovar, &
9338 & inprec, iodesc, vsize, &
9339 & lbi, ubi, lbj, ubj, 0, n(ng), &
9340 & fscl, fmin, fmax, &
9341# ifdef MASKING
9342 & grid(ng) % rmask, &
9343# endif
9344# ifdef CHECKSUM
9345 & mixing(ng) % Lscale, &
9346 & checksum = fhash)
9347# else
9348 & mixing(ng) % Lscale)
9349# endif
9350 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9351 IF (master) THEN
9352 WRITE (stdout,60) string, trim(vname(1,idvmls)), &
9353 & inprec, trim(ncname)
9354 END IF
9355 exit_flag=2
9356 ioerror=status
9357 RETURN
9358 ELSE
9359 IF (master) THEN
9360# ifdef CHECKSUM
9361 WRITE (stdout,70) trim(vname(2,idvmls)), fmin, fmax, &
9362 & fhash
9363# else
9364 WRITE (stdout,70) trim(vname(2,idvmls)), fmin, fmax
9365# endif
9366
9367 END IF
9368 END IF
9369 ELSE
9370 IF (master) THEN
9371 WRITE (stdout,80) string, trim(vname(1,idvmls)), &
9372 & trim(ncname)
9373 END IF
9374 exit_flag=4
9375 IF (founderror(exit_flag, pio_noerr, &
9376 & __line__, myfile)) THEN
9377 RETURN
9378 END IF
9379 END IF
9380 END IF
9381
9382
9383
9384 IF (get_var(idvmkk).and.perfect3d) THEN
9385 foundit=find_string(var_name, n_var, trim(vname(1,idvmkk)), &
9386 & vindex)
9387 IF (foundit) THEN
9389 my_piovar%gtype=w3dvar
9390 IF (kind(mixing(ng)%Akk).eq.8) THEN
9391 my_piovar%dkind=pio_double
9393 ELSE
9394 my_piovar%dkind=pio_real
9396 END IF
9397
9398 status=nf_fread3d(ng, idmod, ncname, piofile, &
9399 & vname(1,idvmkk), my_piovar, &
9400 & inprec, iodesc, vsize, &
9401 & lbi, ubi, lbj, ubj, 0, n(ng), &
9402 & fscl, fmin, fmax, &
9403# ifdef MASKING
9404 & grid(ng) % rmask, &
9405# endif
9406# ifdef CHECKSUM
9407 & mixing(ng) % Akk, &
9408 & checksum = fhash)
9409# else
9410 & mixing(ng) % Akk)
9411# endif
9412 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9413 IF (master) THEN
9414 WRITE (stdout,60) string, trim(vname(1,idvmkk)), &
9415 & inprec, trim(ncname)
9416 END IF
9417 exit_flag=2
9418 ioerror=status
9419 RETURN
9420 ELSE
9421 IF (master) THEN
9422# ifdef CHECKSUM
9423 WRITE (stdout,70) trim(vname(2,idvmkk)), fmin, fmax, &
9424 & fhash
9425# else
9426 WRITE (stdout,70) trim(vname(2,idvmkk)), fmin, fmax
9427# endif
9428
9429 END IF
9430 END IF
9431 ELSE
9432 IF (master) THEN
9433 WRITE (stdout,80) string, trim(vname(1,idvmkk)), &
9434 & trim(ncname)
9435 END IF
9436 exit_flag=4
9437 IF (founderror(exit_flag, pio_noerr, &
9438 & __line__, myfile)) THEN
9439 RETURN
9440 END IF
9441 END IF
9442 END IF
9443
9444# ifdef GLS_MIXING
9445
9446
9447
9448 IF (get_var(idvmkp).and.perfect3d) THEN
9449 foundit=find_string(var_name, n_var, trim(vname(1,idvmkp)), &
9450 & vindex)
9451 IF (foundit) THEN
9453 my_piovar%gtype=w3dvar
9454 IF (kind(mixing(ng)%Akp).eq.8) THEN
9455 my_piovar%dkind=pio_double
9457 ELSE
9458 my_piovar%dkind=pio_real
9460 END IF
9461
9462 status=nf_fread3d(ng, idmod, ncname, piofile, &
9463 & vname(1,idvmkp), my_piovar, &
9464 & inprec, iodesc, vsize, &
9465 & lbi, ubi, lbj, ubj, 0, n(ng), &
9466 & fscl, fmin, fmax, &
9467# ifdef MASKING
9468 & grid(ng) % rmask, &
9469# endif
9470# ifdef CHECKSUM
9471 & mixing(ng) % Akp, &
9472 & checksum = fhash)
9473# else
9474 & mixing(ng) % Akp)
9475# endif
9476 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9477 IF (master) THEN
9478 WRITE (stdout,60) string, trim(vname(1,idvmkp)), &
9479 & inprec, trim(ncname)
9480 END IF
9481 exit_flag=2
9482 ioerror=status
9483 RETURN
9484 ELSE
9485 IF (master) THEN
9486# ifdef CHECKSUM
9487 WRITE (stdout,70) trim(vname(2,idvmkp)), fmin, fmax, &
9488 & fhash
9489# else
9490 WRITE (stdout,70) trim(vname(2,idvmkp)), fmin, fmax
9491# endif
9492
9493 END IF
9494 END IF
9495 ELSE
9496 IF (master) THEN
9497 WRITE (stdout,80) string, trim(vname(1,idvmkp)), &
9498 & trim(ncname)
9499 END IF
9500 exit_flag=4
9501 IF (founderror(exit_flag, pio_noerr, &
9502 & __line__, myfile)) THEN
9503 RETURN
9504 END IF
9505 END IF
9506 END IF
9507# endif
9508# endif
9509# ifdef SEDIMENT
9510
9511
9512
9513
9514 DO i=1,nst
9515 IF (get_var(idfrac(i))) THEN
9516 foundit=find_string(var_name, n_var, &
9517 & trim(vname(1,idfrac(i))), vindex)
9518 IF (foundit) THEN
9520 my_piovar%gtype=b3dvar
9521 IF (kind(sedbed(ng)%bed_frac).eq.8) THEN
9522 my_piovar%dkind=pio_double
9524 ELSE
9525 my_piovar%dkind=pio_real
9527 END IF
9528
9529 status=nf_fread3d(ng, idmod, ncname, piofile, &
9530 & vname(1,idfrac(i)), my_piovar, &
9531 & inprec, iodesc, vsize, &
9532 & lbi, ubi, lbj, ubj, 1, nbed, &
9533 & fscl, fmin, fmax, &
9534# ifdef MASKING
9535 & grid(ng) % rmask, &
9536# endif
9537# ifdef CHECKSUM
9538 & sedbed(ng) % bed_frac(:,:,:,i), &
9539 & checksum = fhash)
9540# else
9541 & sedbed(ng) % bed_frac(:,:,:,i))
9542# endif
9543 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9544 IF (master) THEN
9545 WRITE (stdout,60) string, trim(vname(1,idfrac(i))), &
9546 & inprec, trim(ncname)
9547 END IF
9548 exit_flag=2
9549 ioerror=status
9550 RETURN
9551 ELSE
9552 IF (master) THEN
9553# ifdef CHECKSUM
9554 WRITE (stdout,70) trim(vname(2,idfrac(i))), &
9555 & fmin, fmax, fhash
9556# else
9557 WRITE (stdout,70) trim(vname(2,idfrac(i))), &
9558 & fmin, fmax
9559# endif
9560
9561 END IF
9562 END IF
9563 ELSE
9564 IF (master) THEN
9565 WRITE (stdout,80) string, trim(vname(1,idfrac(i))), &
9566 & trim(ncname)
9567 END IF
9568 exit_flag=4
9569 IF (founderror(exit_flag, pio_noerr, &
9570 & __line__, myfile)) THEN
9571 RETURN
9572 END IF
9573 END IF
9574 END IF
9575
9576
9577
9578 IF (get_var(idbmas(i))) THEN
9579 foundit=find_string(var_name, n_var, &
9580 & trim(vname(1,idbmas(i))), vindex)
9581 IF (foundit) THEN
9583 my_piovar%gtype=b3dvar
9584 IF (kind(sedbed(ng)%bed_mass).eq.8) THEN
9585 my_piovar%dkind=pio_double
9587 ELSE
9588 my_piovar%dkind=pio_real
9590 END IF
9591
9592 status=nf_fread3d(ng, idmod, ncname, piofile, &
9593 & vname(1,idbmas(i)), my_piovar, &
9594 & inprec, iodesc, vsize, &
9595 & lbi, ubi, lbj, ubj, 1, nbed, &
9596 & fscl, fmin, fmax, &
9597# ifdef MASKING
9598 & grid(ng) % rmask, &
9599# endif
9600# ifdef CHECKSUM
9601 & sedbed(ng) % bed_mass(:,:,:,tindex,i), &
9602 & checksum = fhash)
9603# else
9604 & sedbed(ng) % bed_mass(:,:,:,tindex,i))
9605# endif
9606 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9607 IF (master) THEN
9608 WRITE (stdout,60) string, trim(vname(1,idbmas(i))), &
9609 & inprec, trim(ncname)
9610 END IF
9611 exit_flag=2
9612 ioerror=status
9613 RETURN
9614 ELSE
9615 IF (master) THEN
9616# ifdef CHECKSUM
9617 WRITE (stdout,70) trim(vname(2,idbmas(i))), &
9618 & fmin, fmax, fhash
9619# else
9620 WRITE (stdout,70) trim(vname(2,idbmas(i))), &
9621 & fmin, fmax
9622# endif
9623
9624 END IF
9625 END IF
9626 ELSE
9627 IF (master) THEN
9628 WRITE (stdout,80) string, trim(vname(1,idbmas(i))), &
9629 & trim(ncname)
9630 END IF
9631 exit_flag=4
9632 IF (founderror(exit_flag, pio_noerr, &
9633 & __line__, myfile)) THEN
9634 RETURN
9635 END IF
9636 END IF
9637 END IF
9638 END DO
9639
9640
9641
9642 DO i=1,mbedp
9643 IF (get_var(idsbed(i))) THEN
9644 foundit=find_string(var_name, n_var, &
9645 & trim(vname(1,idsbed(i))), vindex)
9646 IF (foundit) THEN
9648 my_piovar%gtype=b3dvar
9649 IF (kind(sedbed(ng)%bed).eq.8) THEN
9650 my_piovar%dkind=pio_double
9652 ELSE
9653 my_piovar%dkind=pio_real
9655 END IF
9656
9657 status=nf_fread3d(ng, idmod, ncname, piofile, &
9658 & vname(1,idsbed(i)), my_piovar, &
9659 & inprec, iodesc, vsize, &
9660 & lbi, ubi, lbj, ubj, 1, nbed, &
9661 & fscl, fmin, fmax, &
9662# ifdef MASKING
9663 & grid(ng) % rmask, &
9664# endif
9665# ifdef CHECKSUM
9666 & sedbed(ng) % bed(:,:,:,i), &
9667 & checksum = fhash)
9668# else
9669 & sedbed(ng) % bed(:,:,:,i))
9670# endif
9671 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9672 IF (master) THEN
9673 WRITE (stdout,60) string, trim(vname(1,idsbed(i))), &
9674 & inprec, trim(ncname)
9675 END IF
9676 exit_flag=2
9677 ioerror=status
9678 RETURN
9679 ELSE
9680 IF (master) THEN
9681# ifdef CHECKSUM
9682 WRITE (stdout,70) trim(vname(2,idsbed(i))), &
9683 & fmin, fmax, fhash
9684# else
9685 WRITE (stdout,70) trim(vname(2,idsbed(i))), &
9686 & fmin, fmax
9687# endif
9688
9689 END IF
9690 END IF
9691 ELSE
9692 IF (master) THEN
9693 WRITE (stdout,80) string, trim(vname(1,idsbed(i))), &
9694 & trim(ncname)
9695 END IF
9696 exit_flag=4
9697 IF (founderror(exit_flag, pio_noerr, &
9698 & __line__, myfile)) THEN
9699 RETURN
9700 END IF
9701 END IF
9702 END IF
9703 END DO
9704
9705# ifdef BEDLOAD
9706
9707
9708
9709 DO i=1,nst
9710 IF (get_var(idubld(i))) THEN
9711 foundit=find_string(var_name, n_var, &
9712 & trim(vname(1,idubld(i))), vindex)
9713 IF (foundit) THEN
9715 my_piovar%gtype=u2dvar
9716 IF (kind(sedbed(ng)%bedldu).eq.8) THEN
9717 my_piovar%dkind=pio_double
9719 ELSE
9720 my_piovar%dkind=pio_real
9722 END IF
9723
9724 status=nf_fread2d(ng, idmod, ncname, piofile, &
9725 & vname(1,idubld(i)), my_piovar, &
9726 & inprec, iodesc, vsize, &
9727 & lbi, ubi, lbj, ubj, &
9728 & fscl, fmin, fmax, &
9729# ifdef MASKING
9730 & grid(ng) % umask, &
9731# endif
9732# ifdef CHECKSUM
9733 & sedbed(ng) % bedldu(:,:,i), &
9734 & checksum = fhash)
9735# else
9736 & sedbed(ng) % bedldu(:,:,i))
9737# endif
9738 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9739 IF (master) THEN
9740 WRITE (stdout,60) string, trim(vname(1,idubld(i))), &
9741 & inprec, trim(ncname)
9742 END IF
9743 exit_flag=2
9744 ioerror=status
9745 RETURN
9746 ELSE
9747 IF (master) THEN
9748# ifdef CHECKSUM
9749 WRITE (stdout,70) trim(vname(2,idubld(i))), &
9750 & fmin, fmax, fhash
9751# else
9752 WRITE (stdout,70) trim(vname(2,idubld(i))), &
9753 & fmin, fmax
9754# endif
9755
9756 END IF
9757 END IF
9758 ELSE
9759 IF (master) THEN
9760 WRITE (stdout,80) string, trim(vname(1,idubld(i))), &
9761 & trim(ncname)
9762 END IF
9763 exit_flag=4
9764 IF (founderror(exit_flag, pio_noerr, &
9765 & __line__, myfile)) THEN
9766 RETURN
9767 END IF
9768 END IF
9769 END IF
9770
9771 IF (get_var(idvbld(i))) THEN
9772 foundit=find_string(var_name, n_var, &
9773 & trim(vname(1,idvbld(i))), vindex)
9774 IF (foundit) THEN
9776 my_piovar%gtype=v2dvar
9777 IF (kind(sedbed(ng)%bedldv).eq.8) THEN
9778 my_piovar%dkind=pio_double
9780 ELSE
9781 my_piovar%dkind=pio_real
9783 END IF
9784
9785 status=nf_fread2d(ng, idmod, ncname, piofile, &
9786 & vname(1,idvbld(i)), my_piovar, &
9787 & inprec, iodesc, vsize, &
9788 & lbi, ubi, lbj, ubj, &
9789 & fscl, fmin, fmax, &
9790# ifdef MASKING
9791 & grid(ng) % vmask, &
9792# endif
9793# ifdef CHECKSUM
9794 & sedbed(ng) % bedldv(:,:,i), &
9795 & checksum = fhash)
9796# else
9797 & sedbed(ng) % bedldv(:,:,i))
9798# endif
9799 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9800 IF (master) THEN
9801 WRITE (stdout,60) string, trim(vname(1,idvbld(i))), &
9802 & inprec, trim(ncname)
9803 END IF
9804 exit_flag=2
9805 ioerror=status
9806 RETURN
9807 ELSE
9808 IF (master) THEN
9809# ifdef CHECKSUM
9810 WRITE (stdout,70) trim(vname(2,idvbld(i))), &
9811 & fmin, fmax, fhash
9812# else
9813 WRITE (stdout,70) trim(vname(2,idvbld(i))), &
9814 & fmin, fmax
9815# endif
9816
9817 END IF
9818 END IF
9819 ELSE
9820 IF (master) THEN
9821 WRITE (stdout,80) string, trim(vname(1,idvbld(i))), &
9822 & trim(ncname)
9823 END IF
9824 exit_flag=4
9825 IF (founderror(exit_flag, pio_noerr, &
9826 & __line__, myfile)) THEN
9827 RETURN
9828 END IF
9829 END IF
9830 END IF
9831 END DO
9832# endif
9833# endif
9834
9835# if defined SEDIMENT || defined BBL_MODEL
9836
9837
9838
9839 DO i=1,mbotp
9840 IF (get_var(idbott(i)).and.have_var(idbott(i))) THEN
9841 foundit=find_string(var_name, n_var, &
9842 & trim(vname(1,idbott(i))), vindex)
9843 IF (foundit) THEN
9845 my_piovar%gtype=r2dvar
9846 IF (kind(sedbed(ng)%bottom).eq.8) THEN
9847 my_piovar%dkind=pio_double
9849 ELSE
9850 my_piovar%dkind=pio_real
9852 END IF
9853
9854 status=nf_fread2d(ng, idmod, ncname, piofile, &
9855 & vname(1,idbott(i)), my_piovar, &
9856 & inprec, iodesc, vsize, &
9857 & lbi, ubi, lbj, ubj, &
9858 & fscl, fmin, fmax, &
9859# ifdef MASKING
9860 & grid(ng) % rmask, &
9861# endif
9862# ifdef CHECKSUM
9863 & sedbed(ng) % bottom(:,:,i), &
9864 & checksum = fhash)
9865# else
9866 & sedbed(ng) % bottom(:,:,i))
9867# endif
9868 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
9869 IF (master) THEN
9870 WRITE (stdout,60) string, trim(vname(1,idbott(i))), &
9871 & inprec, trim(ncname)
9872 END IF
9873 exit_flag=2
9874 ioerror=status
9875 RETURN
9876 ELSE
9877 IF (master) THEN
9878# ifdef CHECKSUM
9879 WRITE (stdout,70) trim(vname(2,idbott(i))), &
9880 & fmin, fmax, fhash
9881# else
9882 WRITE (stdout,70) trim(vname(2,idbott(i))), &
9883 & fmin, fmax
9884# endif
9885
9886 END IF
9887 END IF
9888 ELSE
9889 IF (master) THEN
9890 WRITE (stdout,80) string, trim(vname(1,idbott(i))), &
9891 & trim(ncname)
9892 END IF
9893 exit_flag=4
9894 IF (founderror(exit_flag, pio_noerr, &
9895 & __line__, myfile)) THEN
9896 RETURN
9897 END IF
9898 END IF
9899 END IF
9900 END DO
9901# endif
9902# ifdef ICE_MODEL
9903
9904
9905
9906 DO i=1,nices
9907 IF (isice(i).gt.0) THEN
9908 ifield=isice(i)
9909 IF (get_var(ifield)) THEN
9910 foundit=find_string(var_name, n_var, &
9911 & trim(vname(1,ifield)), vindex)
9912 IF (foundit) THEN
9914 SELECT CASE (i)
9915 CASE (isuice)
9916 my_piovar%gtype=u2dvar
9917 IF (kind(ice(ng)%Si).eq.8) THEN
9918 my_piovar%dkind=pio_double
9920 ELSE
9921 my_piovar%dkind=pio_real
9923 END IF
9924
9925 status=nf_fread2d(ng, idmod, ncname, piofile, &
9926 & vname(1,ifield), my_piovar, &
9927 & inprec, iodesc, vsize, &
9928 & lbi, ubi, lbj, ubj, &
9929 & fscl, fmin, fmax, &
9930# ifdef MASKING
9931 & grid(ng) % umask, &
9932# endif
9933# ifdef CHECKSUM
9934 & ice(ng) % Si(:,:,tindex,i), &
9935 & checksum = fhash)
9936# else
9937 & ice(ng) % Si(:,:,tindex,i))
9938# endif
9939 CASE (isvice)
9940 my_piovar%gtype=v2dvar
9941 IF (kind(ice(ng)%Si).eq.8) THEN
9942 my_piovar%dkind=pio_double
9944 ELSE
9945 my_piovar%dkind=pio_real
9947 END IF
9948
9949 status=nf_fread2d(ng, idmod, ncname, piofile, &
9950 & vname(1,ifield), my_piovar, &
9951 & inprec, iodesc, vsize, &
9952 & lbi, ubi, lbj, ubj, &
9953 & fscl, fmin, fmax, &
9954# ifdef MASKING
9955 & grid(ng) % vmask, &
9956# endif
9957# ifdef CHECKSUM
9958 & ice(ng) % Si(:,:,tindex,i), &
9959 & checksum = fhash)
9960# else
9961 & ice(ng) % Si(:,:,tindex,i))
9962# endif
9963 CASE DEFAULT
9964 my_piovar%gtype=r2dvar
9965 IF (kind(ice(ng)%Si).eq.8) THEN
9966 my_piovar%dkind=pio_double
9968 ELSE
9969 my_piovar%dkind=pio_real
9971 END IF
9972
9973 status=nf_fread2d(ng, idmod, ncname, piofile, &
9974 & vname(1,ifield), my_piovar, &
9975 & inprec, iodesc, vsize, &
9976 & lbi, ubi, lbj, ubj, &
9977 & fscl, fmin, fmax, &
9978# ifdef MASKING
9979 & grid(ng) % rmask, &
9980# endif
9981# ifdef CHECKSUM
9982 & ice(ng) % Si(:,:,tindex,i), &
9983 & checksum = fhash)
9984# else
9985 & ice(ng) % Si(:,:,tindex,i))
9986# endif
9987 END SELECT
9988
9989 IF (founderror(status, pio_noerr, &
9990 & __line__, myfile)) THEN
9991 IF (master) THEN
9992 WRITE (stdout,60) string, trim(vname(1,ifield)), &
9993 & inprec, trim(ncname)
9994 END IF
9995 exit_flag=2
9996 ioerror=status
9997 RETURN
9998 ELSE
9999 IF (master) THEN
10000# ifdef CHECKSUM
10001 WRITE (stdout,70) trim(vname(2,ifield)), &
10002 & fmin, fmax, fhash
10003# else
10004 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
10005# endif
10006 END IF
10007 END IF
10008 END IF
10009 ELSE
10010 IF (master) THEN
10011 WRITE (stdout,80) string, trim(vname(1,ifield)), &
10012 & trim(ncname)
10013 END IF
10014 exit_flag=4
10015 IF (founderror(exit_flag, pio_noerr, &
10016 & __line__, myfile)) THEN
10017 RETURN
10018 END IF
10019 END IF
10020 END IF
10021 END DO
10022# endif
10023# endif
10024 END IF nlm_state
10025# endif
10026
10027# if defined TANGENT || defined TL_IOMS
10028
10029
10030
10031
10032
10033 tlm_state: IF ((model.eq.itlm).or.(model.eq.irpm)) THEN
10034
10035# if defined ADJUST_BOUNDARY || \
10036 defined adjust_wstress || defined adjust_stflux
10037 IF (inner.eq.0.and.model.eq.irpm) THEN
10038 get_adjust=.false.
10039 ELSE
10040 get_adjust=.true.
10041 END IF
10042# endif
10043
10044
10045
10046 IF (get_var(idfsur)) THEN
10047 foundit=find_string(var_name, n_var, trim(vname(1,idfsur)), &
10048 & vindex)
10049 IF (foundit) THEN
10051 my_piovar%gtype=r2dvar
10052 IF (kind(ocean(ng)%tl_zeta).eq.8) THEN
10053 my_piovar%dkind=pio_double
10055 ELSE
10056 my_piovar%dkind=pio_real
10058 END IF
10059
10060 status=nf_fread2d(ng, idmod, ncname, piofile, &
10061 & vname(1,idfsur), my_piovar, &
10062 & inprec, iodesc, vsize, &
10063 & lbi, ubi, lbj, ubj, &
10064 & fscl, fmin, fmax, &
10065# ifdef MASKING
10066 & grid(ng) % rmask, &
10067# endif
10068# ifdef CHECKSUM
10069 & ocean(ng) % tl_zeta(:,:,tindex), &
10070 & checksum = fhash)
10071# else
10072 & ocean(ng) % tl_zeta(:,:,tindex))
10073# endif
10074 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10075 IF (master) THEN
10076 WRITE (stdout,60) string, trim(vname(1,idfsur)), &
10077 & inprec, trim(ncname)
10078 END IF
10079 exit_flag=2
10080 ioerror=status
10081 RETURN
10082 ELSE
10083 IF (master) THEN
10084# ifdef CHECKSUM
10085 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax, &
10086 & fhash
10087# else
10088 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax
10089# endif
10090 END IF
10091 END IF
10092 ELSE
10093 IF (master) THEN
10094 WRITE (stdout,80) string, trim(vname(1,idfsur)), &
10095 & trim(ncname)
10096 END IF
10097 exit_flag=4
10098 IF (founderror(exit_flag, pio_noerr, &
10099 & __line__, myfile)) THEN
10100 RETURN
10101 END IF
10102 END IF
10103 END IF
10104
10105# ifdef ADJUST_BOUNDARY
10106
10107
10108
10109 IF (get_var(idsbry(isfsur)).and.get_adjust.and. &
10110 & any(lobc(:,isfsur,ng))) THEN
10111 ifield=idsbry(isfsur)
10112 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
10113 & vindex)
10114 IF (foundit) THEN
10116 my_piovar%gtype=r2dobc
10117 IF (kind(boundary(ng)%tl_zeta_obc).eq.8) THEN
10118 my_piovar%dkind=pio_double
10120 ELSE
10121 my_piovar%dkind=pio_real
10123 END IF
10124
10125 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
10126 & vname(1,ifield), my_piovar, &
10127 & inprec, iodesc, &
10128 & lbij, ubij, nbrec(ng), &
10129 & fscl, fmin, fmax, &
10130# ifdef CHECKSUM
10131 & boundary(ng) % tl_zeta_obc(:,:,:, &
10132 & tindex), &
10133 & checksum = fhash)
10134# else
10135 & boundary(ng) % tl_zeta_obc(:,:,:, &
10136 & tindex))
10137# endif
10138 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10139 IF (master) THEN
10140 WRITE (stdout,60) string, trim(vname(1,ifield)), &
10141 & inprec, trim(ncname)
10142 END IF
10143 exit_flag=2
10144 ioerror=status
10145 RETURN
10146 ELSE
10147 IF (master) THEN
10148# ifdef CHECKSUM
10149 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
10150 & fhash
10151# else
10152 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
10153# endif
10154 END IF
10155 END IF
10156 ELSE
10157 IF (master) THEN
10158 WRITE (stdout,80) string, trim(vname(1,ifield)), &
10159 & trim(ncname)
10160 END IF
10161 exit_flag=4
10162 IF (founderror(exit_flag, pio_noerr, &
10163 & __line__, myfile)) THEN
10164 RETURN
10165 END IF
10166 END IF
10167 END IF
10168# endif
10169
10170
10171
10172 IF (get_var(idubar)) THEN
10173 foundit=find_string(var_name, n_var, trim(vname(1,idubar)), &
10174 & vindex)
10175 IF (foundit) THEN
10177 my_piovar%gtype=u2dvar
10178 IF (kind(ocean(ng)%tl_ubar).eq.8) THEN
10179 my_piovar%dkind=pio_double
10181 ELSE
10182 my_piovar%dkind=pio_real
10184 END IF
10185
10186 status=nf_fread2d(ng, idmod, ncname, piofile, &
10187 & vname(1,idubar), my_piovar, &
10188 & inprec, iodesc, vsize, &
10189 & lbi, ubi, lbj, ubj, &
10190 & fscl, fmin, fmax, &
10191# ifdef MASKING
10192 & grid(ng) % umask, &
10193# endif
10194# ifdef CHECKSUM
10195 & ocean(ng) % tl_ubar(:,:,tindex), &
10196 & checksum = fhash)
10197# else
10198 & ocean(ng) % tl_ubar(:,:,tindex))
10199# endif
10200 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10201 IF (master) THEN
10202 WRITE (stdout,60) string, trim(vname(1,idubar)), &
10203 & inprec, trim(ncname)
10204 END IF
10205 exit_flag=2
10206 ioerror=status
10207 RETURN
10208 ELSE
10209 IF (master) THEN
10210# ifdef CHECKSUM
10211 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax, &
10212 & fhash
10213# else
10214 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax
10215# endif
10216 END IF
10217 END IF
10218 ELSE
10219 IF (master) THEN
10220 WRITE (stdout,80) string, trim(vname(1,idubar)), &
10221 & trim(ncname)
10222 END IF
10223 exit_flag=4
10224 IF (founderror(exit_flag, pio_noerr, &
10225 & __line__, myfile)) THEN
10226 RETURN
10227 END IF
10228 END IF
10229 END IF
10230
10231# ifdef ADJUST_BOUNDARY
10232
10233
10234
10235 IF (get_var(idsbry(isubar)).and.get_adjust.and. &
10236 & any(lobc(:,isubar,ng))) THEN
10237 ifield=idsbry(isubar)
10238 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
10239 & vindex)
10240 IF (foundit) THEN
10242 my_piovar%gtype=u2dobc
10243 IF (kind(boundary(ng)%tl_ubar_obc).eq.8) THEN
10244 my_piovar%dkind=pio_double
10246 ELSE
10247 my_piovar%dkind=pio_real
10249 END IF
10250
10251 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
10252 & vname(1,ifield), my_piovar, &
10253 & inprec, iodesc, &
10254 & lbij, ubij, nbrec(ng), &
10255 & fscl, fmin, fmax, &
10256# ifdef CHECKSUM
10257 & boundary(ng) % tl_ubar_obc(:,:,:, &
10258 & tindex), &
10259 & checksum = fhash)
10260# else
10261 & boundary(ng) % tl_ubar_obc(:,:,:, &
10262 & tindex))
10263# endif
10264 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10265 IF (master) THEN
10266 WRITE (stdout,60) string, trim(vname(1,ifield)), &
10267 & inprec, trim(ncname)
10268 END IF
10269 exit_flag=2
10270 ioerror=status
10271 RETURN
10272 ELSE
10273 IF (master) THEN
10274# ifdef CHECKSUM
10275 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
10276 & fhash
10277# else
10278 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
10279# endif
10280 END IF
10281 END IF
10282 ELSE
10283 IF (master) THEN
10284 WRITE (stdout,80) string, trim(vname(1,ifield)), &
10285 & trim(ncname)
10286 END IF
10287 exit_flag=4
10288 IF (founderror(exit_flag, pio_noerr, &
10289 & __line__, myfile)) THEN
10290 RETURN
10291 END IF
10292 END IF
10293 END IF
10294# endif
10295
10296
10297
10298 IF (get_var(idvbar)) THEN
10299 foundit=find_string(var_name, n_var, trim(vname(1,idvbar)), &
10300 & vindex)
10301 IF (foundit) THEN
10303 my_piovar%gtype=v2dvar
10304 IF (kind(ocean(ng)%tl_vbar).eq.8) THEN
10305 my_piovar%dkind=pio_double
10307 ELSE
10308 my_piovar%dkind=pio_real
10310 END IF
10311
10312 status=nf_fread2d(ng, idmod, ncname, piofile, &
10313 & vname(1,idvbar), my_piovar, &
10314 & inprec, iodesc, vsize, &
10315 & lbi, ubi, lbj, ubj, &
10316 & fscl, fmin, fmax, &
10317# ifdef MASKING
10318 & grid(ng) % vmask, &
10319# endif
10320# ifdef CHECKSUM
10321 & ocean(ng) % tl_vbar(:,:,tindex), &
10322 & checksum = fhash)
10323# else
10324 & ocean(ng) % tl_vbar(:,:,tindex))
10325# endif
10326 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10327 IF (master) THEN
10328 WRITE (stdout,60) string, trim(vname(1,idvbar)), &
10329 & inprec, trim(ncname)
10330 END IF
10331 exit_flag=2
10332 ioerror=status
10333 RETURN
10334 ELSE
10335 IF (master) THEN
10336# ifdef CHECKSUM
10337 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax, &
10338 & fhash
10339# else
10340 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax
10341# endif
10342 END IF
10343 END IF
10344 ELSE
10345 IF (master) THEN
10346 WRITE (stdout,80) string, trim(vname(1,idvbar)), &
10347 & trim(ncname)
10348 END IF
10349 exit_flag=4
10350 IF (founderror(exit_flag, pio_noerr, &
10351 & __line__, myfile)) THEN
10352 RETURN
10353 END IF
10354 END IF
10355 END IF
10356
10357# ifdef ADJUST_BOUNDARY
10358
10359
10360
10361 IF (get_var(idsbry(isvbar)).and.get_adjust.and. &
10362 & any(lobc(:,isvbar,ng))) THEN
10363 ifield=idsbry(isvbar)
10364 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
10365 & vindex)
10366 IF (foundit) THEN
10368 my_piovar%gtype=v2dobc
10369 IF (kind(boundary(ng)%tl_vbar_obc).eq.8) THEN
10370 my_piovar%dkind=pio_double
10372 ELSE
10373 my_piovar%dkind=pio_real
10375 END IF
10376
10377 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
10378 & vname(1,ifield), my_piovar, &
10379 & inprec, iodesc, &
10380 & lbij, ubij, nbrec(ng), &
10381 & fscl, fmin, fmax, &
10382# ifdef CHECKSUM
10383 & boundary(ng) % tl_vbar_obc(:,:,:, &
10384 & tindex), &
10385 & checksum = fhash)
10386# else
10387 & boundary(ng) % tl_vbar_obc(:,:,:, &
10388 & tindex))
10389# endif
10390 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10391 IF (master) THEN
10392 WRITE (stdout,60) string, trim(vname(1,ifield)), &
10393 & inprec, trim(ncname)
10394 END IF
10395 exit_flag=2
10396 ioerror=status
10397 RETURN
10398 ELSE
10399 IF (master) THEN
10400# ifdef CHECKSUM
10401 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
10402 & fhash
10403# else
10404 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
10405# endif
10406 END IF
10407 END IF
10408 ELSE
10409 IF (master) THEN
10410 WRITE (stdout,80) string, trim(vname(1,ifield)), &
10411 & trim(ncname)
10412 END IF
10413 exit_flag=4
10414 IF (founderror(exit_flag, pio_noerr, &
10415 & __line__, myfile)) THEN
10416 RETURN
10417 END IF
10418 END IF
10419 END IF
10420# endif
10421# ifdef ADJUST_WSTRESS
10422
10423
10424
10425 IF (get_var(idusms).and.get_adjust) THEN
10426 foundit=find_string(var_name, n_var, trim(vname(1,idusms)), &
10427 & vindex)
10428 IF (foundit) THEN
10429 scale=1.0_dp
10431 my_piovar%gtype=u2dvar
10432 IF (kind(forces(ng)%tl_ustr).eq.8) THEN
10433 my_piovar%dkind=pio_double
10435 ELSE
10436 my_piovar%dkind=pio_real
10438 END IF
10439
10440 status=nf_fread3d(ng, idmod, ncname, piofile, &
10441 & vname(1,idusms), my_piovar, &
10442 & inprec, iodesc, vsize, &
10443 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
10444 & scale, fmin, fmax, &
10445# ifdef MASKING
10446 & grid(ng) % umask, &
10447# endif
10448# ifdef CHECKSUM
10449 & forces(ng) % tl_ustr(:,:,:,tindex), &
10450 & checksum = fhash)
10451# else
10452 & forces(ng) % tl_ustr(:,:,:,tindex))
10453# endif
10454 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10455 IF (master) THEN
10456 WRITE (stdout,60) string, trim(vname(1,idusms)), &
10457 & inprec, trim(ncname)
10458 END IF
10459 exit_flag=2
10460 ioerror=status
10461 RETURN
10462 ELSE
10463 IF (master) THEN
10464# ifdef CHECKSUM
10465 WRITE (stdout,70) trim(vname(2,idusms))// &
10466 & ', adjusted tl_ustr', fmin, fmax, &
10467 & fhash
10468# else
10469 WRITE (stdout,70) trim(vname(2,idusms))// &
10470 & ', adjusted tl_ustr', fmin, fmax
10471# endif
10472 END IF
10473 END IF
10474 ELSE
10475 IF (master) THEN
10476 WRITE (stdout,80) string, trim(vname(1,idusms)), &
10477 & trim(ncname)
10478 END IF
10479 exit_flag=4
10480 IF (founderror(exit_flag, pio_noerr, &
10481 & __line__, myfile)) THEN
10482 RETURN
10483 END IF
10484 END IF
10485 END IF
10486
10487
10488
10489 IF (get_var(idvsms).and.get_adjust) THEN
10490 foundit=find_string(var_name, n_var, trim(vname(1,idvsms)), &
10491 & vindex)
10492 IF (foundit) THEN
10493 scale=1.0_dp
10495 my_piovar%gtype=v2dvar
10496 IF (kind(forces(ng)%tl_vstr).eq.8) THEN
10497 my_piovar%dkind=pio_double
10499 ELSE
10500 my_piovar%dkind=pio_real
10502 END IF
10503
10504 status=nf_fread3d(ng, idmod, ncname, piofile, &
10505 & vname(1,idvsms), my_piovar, &
10506 & inprec, iodesc, vsize, &
10507 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
10508 & scale, fmin, fmax, &
10509# ifdef MASKING
10510 & grid(ng) % vmask, &
10511# endif
10512# ifdef CHECKSUM
10513 & forces(ng) % tl_vstr(:,:,:,tindex), &
10514 & checksum = fhash)
10515# else
10516 & forces(ng) % tl_vstr(:,:,:,tindex))
10517# endif
10518 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10519 IF (master) THEN
10520 WRITE (stdout,60) string, trim(vname(1,idvsms)), &
10521 & inprec, trim(ncname)
10522 END IF
10523 exit_flag=2
10524 ioerror=status
10525 RETURN
10526 ELSE
10527 IF (master) THEN
10528# ifdef CHECKSUM
10529 WRITE (stdout,70) trim(vname(2,idvsms))// &
10530 & ', adjusted tl_vstr', fmin, fmax, &
10531 & fhash
10532# else
10533 WRITE (stdout,70) trim(vname(2,idvsms))// &
10534 & ', adjusted tl_vstr', fmin, fmax
10535# endif
10536 END IF
10537 END IF
10538 ELSE
10539 IF (master) THEN
10540 WRITE (stdout,80) string, trim(vname(1,idvsms)), &
10541 & trim(ncname)
10542 END IF
10543 exit_flag=4
10544 IF (founderror(exit_flag, pio_noerr, &
10545 & __line__, myfile)) THEN
10546 RETURN
10547 END IF
10548 END IF
10549 END IF
10550# endif
10551# ifdef SOLVE3D
10552
10553
10554
10555
10556 IF (get_var(iduvel)) THEN
10557 foundit=find_string(var_name, n_var, trim(vname(1,iduvel)), &
10558 & vindex)
10559 IF (foundit) THEN
10561 my_piovar%gtype=u3dvar
10562 IF (kind(ocean(ng)%tl_u).eq.8) THEN
10563 my_piovar%dkind=pio_double
10565 ELSE
10566 my_piovar%dkind=pio_real
10568 END IF
10569
10570 status=nf_fread3d(ng, idmod, ncname, piofile, &
10571 & vname(1,iduvel), my_piovar, &
10572 & inprec, iodesc, vsize, &
10573 & lbi, ubi, lbj, ubj, 1, n(ng), &
10574 & fscl, fmin, fmax, &
10575# ifdef MASKING
10576 & grid(ng) % umask, &
10577# endif
10578# ifdef CHECKSUM
10579 & ocean(ng) % tl_u(:,:,:,tindex), &
10580 & checksum = fhash)
10581# else
10582 & ocean(ng) % tl_u(:,:,:,tindex))
10583# endif
10584 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10585 IF (master) THEN
10586 WRITE (stdout,60) string, trim(vname(1,iduvel)), &
10587 & inprec, trim(ncname)
10588 END IF
10589 exit_flag=2
10590 ioerror=status
10591 RETURN
10592 ELSE
10593 IF (master) THEN
10594# ifdef CHECKSUM
10595 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax, &
10596 & fhash
10597# else
10598 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax
10599# endif
10600 END IF
10601 END IF
10602 ELSE
10603 IF (master) THEN
10604 WRITE (stdout,80) string, trim(vname(1,iduvel)), &
10605 & trim(ncname)
10606 END IF
10607 exit_flag=4
10608 IF (founderror(exit_flag, pio_noerr, &
10609 & __line__, myfile)) THEN
10610 RETURN
10611 END IF
10612 END IF
10613 END IF
10614
10615# ifdef ADJUST_BOUNDARY
10616
10617
10618
10619 IF (get_var(idsbry(isuvel)).and.get_adjust.and. &
10620 & any(lobc(:,isuvel,ng))) THEN
10621 ifield=idsbry(isuvel)
10622 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
10623 & vindex)
10624 IF (foundit) THEN
10626 my_piovar%gtype=u3dobc
10627 IF (kind(boundary(ng)%tl_u_obc).eq.8) THEN
10628 my_piovar%dkind=pio_double
10630 ELSE
10631 my_piovar%dkind=pio_real
10633 END IF
10634
10635 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
10636 & vname(1,ifield), my_piovar, &
10637 & inprec, iodesc, &
10638 & lbij, ubij, 1, n(ng), nbrec(ng), &
10639 & fscl, fmin, fmax, &
10640# ifdef CHECKSUM
10641 & boundary(ng) % tl_u_obc(:,:,:,:, &
10642 & tindex), &
10643 & checksum = fhash)
10644# else
10645 & boundary(ng) % tl_u_obc(:,:,:,:, &
10646 & tindex))
10647# endif
10648 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10649 IF (master) THEN
10650 WRITE (stdout,60) string, trim(vname(1,ifield)), &
10651 & inprec, trim(ncname)
10652 END IF
10653 exit_flag=2
10654 ioerror=status
10655 RETURN
10656 ELSE
10657 IF (master) THEN
10658# ifdef CHECKSUM
10659 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
10660 & fhash
10661# else
10662 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
10663# endif
10664 END IF
10665 END IF
10666 ELSE
10667 IF (master) THEN
10668 WRITE (stdout,80) string, trim(vname(1,ifield)), &
10669 & trim(ncname)
10670 END IF
10671 exit_flag=4
10672 IF (founderror(exit_flag, pio_noerr, &
10673 & __line__, myfile)) THEN
10674 RETURN
10675 END IF
10676 END IF
10677 END IF
10678# endif
10679
10680
10681
10682 IF (get_var(idvvel)) THEN
10683 foundit=find_string(var_name, n_var, trim(vname(1,idvvel)), &
10684 & vindex)
10685 IF (foundit) THEN
10687 my_piovar%gtype=v3dvar
10688 IF (kind(ocean(ng)%tl_v).eq.8) THEN
10689 my_piovar%dkind=pio_double
10691 ELSE
10692 my_piovar%dkind=pio_real
10694 END IF
10695
10696 status=nf_fread3d(ng, idmod, ncname, piofile, &
10697 & vname(1,idvvel), my_piovar, &
10698 & inprec, iodesc, vsize, &
10699 & lbi, ubi, lbj, ubj, 1, n(ng), &
10700 & fscl, fmin, fmax, &
10701# ifdef MASKING
10702 & grid(ng) % vmask, &
10703# endif
10704# ifdef CHECKSUM
10705 & ocean(ng) % tl_v(:,:,:,tindex), &
10706 & checksum = fhash)
10707# else
10708 & ocean(ng) % tl_v(:,:,:,tindex))
10709# endif
10710 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10711 IF (master) THEN
10712 WRITE (stdout,60) string, trim(vname(1,idvvel)), &
10713 & inprec, trim(ncname)
10714 END IF
10715 exit_flag=2
10716 ioerror=status
10717 RETURN
10718 ELSE
10719 IF (master) THEN
10720# ifdef CHECKSUM
10721 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax, &
10722 & fhash
10723# else
10724 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax
10725# endif
10726 END IF
10727 END IF
10728 ELSE
10729 IF (master) THEN
10730 WRITE (stdout,80) string, trim(vname(1,idvvel)), &
10731 & trim(ncname)
10732 END IF
10733 exit_flag=4
10734 IF (founderror(exit_flag, pio_noerr, &
10735 & __line__, myfile)) THEN
10736 RETURN
10737 END IF
10738 END IF
10739 END IF
10740
10741# ifdef ADJUST_BOUNDARY
10742
10743
10744
10745 IF (get_var(idsbry(isvvel)).and.get_adjust.and. &
10746 & any(lobc(:,isvvel,ng))) THEN
10747 ifield=idsbry(isvvel)
10748 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
10749 & vindex)
10750 IF (foundit) THEN
10752 my_piovar%gtype=v3dobc
10753 IF (kind(boundary(ng)%tl_v_obc).eq.8) THEN
10754 my_piovar%dkind=pio_double
10756 ELSE
10757 my_piovar%dkind=pio_real
10759 END IF
10760
10761 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
10762 & vname(1,ifield), my_piovar, &
10763 & inprec, iodesc, &
10764 & lbij, ubij, 1, n(ng), nbrec(ng), &
10765 & fscl, fmin, fmax, &
10766# ifdef CHECKSUM
10767 & boundary(ng) % tl_v_obc(:,:,:,:, &
10768 & tindex), &
10769 & checksum = fhash)
10770# else
10771 & boundary(ng) % tl_v_obc(:,:,:,:, &
10772 & tindex))
10773# endif
10774 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10775 IF (master) THEN
10776 WRITE (stdout,60) string, trim(vname(1,ifield)), &
10777 & inprec, trim(ncname)
10778 END IF
10779 exit_flag=2
10780 ioerror=status
10781 RETURN
10782 ELSE
10783 IF (master) THEN
10784# ifdef CHECKSUM
10785 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
10786 & fhash
10787# else
10788 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
10789# endif
10790 END IF
10791 END IF
10792 ELSE
10793 IF (master) THEN
10794 WRITE (stdout,80) string, trim(vname(1,ifield)), &
10795 & trim(ncname)
10796 END IF
10797 exit_flag=4
10798 IF (founderror(exit_flag, pio_noerr, &
10799 & __line__, myfile)) THEN
10800 RETURN
10801 END IF
10802 END IF
10803 END IF
10804# endif
10805
10806
10807
10808 DO itrc=1,nt(ng)
10809 IF (get_var(idtvar(itrc))) THEN
10810 foundit=find_string(var_name, n_var, &
10811 & trim(vname(1,idtvar(itrc))), vindex)
10812 IF (foundit) THEN
10814 my_piovar%gtype=r3dvar
10815 IF (kind(ocean(ng)%tl_t).eq.8) THEN
10816 my_piovar%dkind=pio_double
10818 ELSE
10819 my_piovar%dkind=pio_real
10821 END IF
10822
10823 status=nf_fread3d(ng, idmod, ncname, piofile, &
10824 & vname(1,idtvar(itrc)), my_piovar, &
10825 & inprec, iodesc, vsize, &
10826 & lbi, ubi, lbj, ubj, 1, n(ng), &
10827 & fscl, fmin, fmax, &
10828# ifdef MASKING
10829 & grid(ng) % rmask, &
10830# endif
10831# ifdef CHECKSUM
10832 & ocean(ng) % tl_t(:,:,:,tindex,itrc), &
10833 & checksum = fhash)
10834# else
10835 & ocean(ng) % tl_t(:,:,:,tindex,itrc))
10836# endif
10837 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10838 IF (master) THEN
10839 WRITE (stdout,60) string, trim(vname(1,idtvar(itrc))),&
10840 & inprec, trim(ncname)
10841 END IF
10842 exit_flag=2
10843 ioerror=status
10844 RETURN
10845 ELSE
10846 IF (master) THEN
10847# ifdef CHECKSUM
10848 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
10849 & fmin, fmax, fhash
10850# else
10851 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
10852 & fmin, fmax
10853# endif
10854 END IF
10855 END IF
10856 ELSE
10857 IF (master) THEN
10858 WRITE (stdout,80) string, trim(vname(1,idtvar(itrc))), &
10859 & trim(ncname)
10860 END IF
10861 exit_flag=4
10862 IF (founderror(exit_flag, pio_noerr, &
10863 & __line__, myfile)) THEN
10864 RETURN
10865 END IF
10866 END IF
10867 END IF
10868 END DO
10869
10870# ifdef ADJUST_BOUNDARY
10871
10872
10873
10874 DO itrc=1,nt(ng)
10875 IF (get_var(idsbry(istvar(itrc))).and.get_adjust.and. &
10876 & any(lobc(:,istvar(itrc),ng))) THEN
10877 ifield=idsbry(istvar(itrc))
10878 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
10879 & vindex)
10880 IF (foundit) THEN
10882 my_piovar%gtype=r3dobc
10883 IF (kind(boundary(ng)%tl_t_obc).eq.8) THEN
10884 my_piovar%dkind=pio_double
10886 ELSE
10887 my_piovar%dkind=pio_real
10889 END IF
10890
10891 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
10892 & vname(1,ifield), my_piovar, &
10893 & inprec, iodesc, &
10894 & lbij, ubij, 1, n(ng), nbrec(ng), &
10895 & fscl, fmin, fmax, &
10896# ifdef CHECKSUM
10897 & boundary(ng) % tl_t_obc(:,:,:,:, &
10898 & tindex,itrc), &
10899 & checksum = fhash)
10900# else
10901 & boundary(ng) % tl_t_obc(:,:,:,:, &
10902 & tindex,itrc))
10903# endif
10904 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10905 IF (master) THEN
10906 WRITE (stdout,60) string, trim(vname(1,ifield)), &
10907 & inprec, trim(ncname)
10908 END IF
10909 exit_flag=2
10910 ioerror=status
10911 RETURN
10912 ELSE
10913 IF (master) THEN
10914# ifdef CHECKSUM
10915 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
10916 & fhash
10917# else
10918 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
10919# endif
10920 END IF
10921 END IF
10922 ELSE
10923 IF (master) THEN
10924 WRITE (stdout,80) string, trim(vname(1,ifield)), &
10925 & trim(ncname)
10926 END IF
10927 exit_flag=4
10928 IF (founderror(exit_flag, pio_noerr, &
10929 & __line__, myfile)) THEN
10930 RETURN
10931 END IF
10932 END IF
10933 END IF
10934 END DO
10935# endif
10936# ifdef ADJUST_STFLUX
10937
10938
10939
10940 DO itrc=1,nt(ng)
10941 IF (get_var(idtsur(itrc)).and.get_adjust.and. &
10942 & lstflux(itrc,ng)) THEN
10943 foundit=find_string(var_name, n_var, &
10944 & trim(vname(1,idtsur(itrc))), vindex)
10945 IF (foundit) THEN
10946 scale=1.0_dp
10948 my_piovar%gtype=r2dvar
10949 IF (kind(forces(ng)%tl_tflux).eq.8) THEN
10950 my_piovar%dkind=pio_double
10952 ELSE
10953 my_piovar%dkind=pio_real
10955 END IF
10956
10957 status=nf_fread3d(ng, idmod, ncname, piofile, &
10958 & vname(1,idtsur(itrc)), my_piovar, &
10959 & inprec, iodesc, vsize, &
10960 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
10961 & scale, fmin, fmax, &
10962# ifdef MASKING
10963 & grid(ng) % rmask, &
10964# endif
10965# ifdef CHECKSUM
10966 & forces(ng)% tl_tflux(:,:,:, &
10967 & tindex,itrc), &
10968 & checksum = fhash)
10969# else
10970 & forces(ng)% tl_tflux(:,:,:, &
10971 & tindex,itrc))
10972# endif
10973 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
10974 IF (master) THEN
10975 WRITE (stdout,60) string, trim(vname(1,idtsur(itrc))),&
10976 & inprec, trim(ncname)
10977 END IF
10978 exit_flag=2
10979 ioerror=status
10980 RETURN
10981 ELSE
10982 IF (master) THEN
10983# ifdef CHECKSUM
10984 WRITE (stdout,70) trim(vname(2,idtsur(itrc)))// &
10985 & ', adjusted tl_tflux', fmin, fmax, &
10986 & fhash
10987# else
10988 WRITE (stdout,70) trim(vname(2,idtsur(itrc)))// &
10989 & ', adjusted tl_tflux', fmin, fmax
10990# endif
10991 END IF
10992 END IF
10993 ELSE
10994 IF (master) THEN
10995 WRITE (stdout,80) string, trim(vname(1,idtsur(itrc))), &
10996 & trim(ncname)
10997 END IF
10998 exit_flag=4
10999 IF (founderror(exit_flag, pio_noerr, &
11000 & __line__, myfile)) THEN
11001 RETURN
11002 END IF
11003 END IF
11004 END IF
11005 END DO
11006# endif
11007# ifdef SEDIMENT
11008
11009
11010
11011
11012 DO i=1,nst
11013 IF (get_var(idfrac(i))) THEN
11014 foundit=find_string(var_name, n_var, &
11015 & trim(vname(1,idfrac(i))), vindex)
11016 IF (foundit) THEN
11018 my_piovar%gtype=b3dvar
11019 IF (kind(ocean(ng)%tl_bed_frac).eq.8) THEN
11020 my_piovar%dkind=pio_double
11022 ELSE
11023 my_piovar%dkind=pio_real
11025 END IF
11026
11027 status=nf_fread3d(ng, idmod, ncname, piofile, &
11028 & vname(1,idfrac(i)), my_piovar, &
11029 & inprec, iodesc, vsize, &
11030 & lbi, ubi, lbj, ubj, 1, nbed, &
11031 & fscl, fmin, fmax, &
11032# ifdef MASKING
11033 & grid(ng) % rmask, &
11034# endif
11035# ifdef CHECKSUM
11036 & sedbed(ng) % tl_bed_frac(:,:,:,i), &
11037 & checksum = fhash)
11038# else
11039 & sedbed(ng) % tl_bed_frac(:,:,:,i))
11040# endif
11041 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11042 IF (master) THEN
11043 WRITE (stdout,60) string, trim(vname(1,idfrac(i))), &
11044 & inprec, trim(ncname)
11045 END IF
11046 exit_flag=2
11047 ioerror=status
11048 RETURN
11049 ELSE
11050 IF (master) THEN
11051# ifdef CHECKSUM
11052 WRITE (stdout,70) trim(vname(2,idfrac(i))), &
11053 & fmin, fmax, fhash
11054# else
11055 WRITE (stdout,70) trim(vname(2,idfrac(i))), &
11056 & fmin, fmax
11057# endif
11058 END IF
11059 END IF
11060 ELSE
11061 IF (master) THEN
11062 WRITE (stdout,80) string, trim(vname(1,idfrac(i))), &
11063 & trim(ncname)
11064 END IF
11065 exit_flag=4
11066 IF (founderror(exit_flag, pio_noerr, &
11067 & __line__, myfile)) THEN
11068 RETURN
11069 END IF
11070 END IF
11071 END IF
11072
11073
11074
11075
11076 IF (get_var(idbmas(i))) THEN
11077 foundit=find_string(var_name, n_var, &
11078 & trim(vname(1,idbmas(i))), vindex)
11079 IF (foundit) THEN
11081 my_piovar%gtype=b3dvar
11082 IF (kind(ocean(ng)%tl_bed_mass).eq.8) THEN
11083 my_piovar%dkind=pio_double
11085 ELSE
11086 my_piovar%dkind=pio_real
11088 END IF
11089
11090 status=nf_fread3d(ng, idmod, ncname, piofile, &
11091 & vname(1,idbmas(i)), my_piovar, &
11092 & inprec, iodesc, vsize, &
11093 & lbi, ubi, lbj, ubj, 1, nbed, &
11094 & fscl, fmin, fmax, &
11095# ifdef MASKING
11096 & grid(ng) % rmask, &
11097# endif
11098# ifdef CHECKSUM
11099 & sedbed(ng) % tl_bed_mass(:,:,:, &
11100 & tindex,i), &
11101 & checksum = fhash)
11102# else
11103 & sedbed(ng) % tl_bed_mass(:,:,:, &
11104 & tindex,i))
11105# endif
11106 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11107 IF (master) THEN
11108 WRITE (stdout,60) string, trim(vname(1,idbmas(i))), &
11109 & inprec, trim(ncname)
11110 END IF
11111 exit_flag=2
11112 ioerror=status
11113 RETURN
11114 ELSE
11115 IF (master) THEN
11116# ifdef CHECKSUM
11117 WRITE (stdout,70) trim(vname(2,idbmas(i))), &
11118 & fmin, fmax, fhash
11119# else
11120 WRITE (stdout,70) trim(vname(2,idbmas(i))), &
11121 & fmin, fmax
11122# endif
11123 END IF
11124 END IF
11125 ELSE
11126 IF (master) THEN
11127 WRITE (stdout,80) string, trim(vname(1,idbmas(i))), &
11128 & trim(ncname)
11129 END IF
11130 exit_flag=4
11131 IF (founderror(exit_flag, pio_noerr, &
11132 & __line__, myfile)) THEN
11133 RETURN
11134 END IF
11135 END IF
11136 END IF
11137 END DO
11138
11139
11140
11141 DO i=1,mbedp
11142 IF (get_var(idsbed(i))) THEN
11143 foundit=find_string(var_name, n_var, &
11144 & trim(vname(1,idsbed(i))), vindex)
11145 IF (foundit) THEN
11147 my_piovar%gtype=b3dvar
11148 IF (kind(ocean(ng)%tl_bed).eq.8) THEN
11149 my_piovar%dkind=pio_double
11151 ELSE
11152 my_piovar%dkind=pio_real
11154 END IF
11155
11156 status=nf_fread3d(ng, idmod, ncname, piofile, &
11157 & vname(1,idsbed(i)), my_piovar, &
11158 & inprec, iodesc, vsize, &
11159 & lbi, ubi, lbj, ubj, 1, nbed, &
11160 & fscl, fmin, fmax, &
11161# ifdef MASKING
11162 & grid(ng) % rmask, &
11163# endif
11164# ifdef CHECKSUM
11165 & sedbed(ng) % tl_bed(:,:,:,i), &
11166 & checksum = fhash)
11167# else
11168 & sedbed(ng) % tl_bed(:,:,:,i))
11169# endif
11170 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11171 IF (master) THEN
11172 WRITE (stdout,60) string, trim(vname(1,idsbed(i))), &
11173 & inprec, trim(ncname)
11174 END IF
11175 exit_flag=2
11176 ioerror=status
11177 RETURN
11178 ELSE
11179 IF (master) THEN
11180# ifdef CHECKSUM
11181 WRITE (stdout,70) trim(vname(2,idsbed(i))), &
11182 & fmin, fmax, fhash
11183# else
11184 WRITE (stdout,70) trim(vname(2,idsbed(i))), &
11185 & fmin, fmax
11186# endif
11187 END IF
11188 END IF
11189 ELSE
11190 IF (master) THEN
11191 WRITE (stdout,80) string, trim(vname(1,idsbed(i))), &
11192 & trim(ncname)
11193 END IF
11194 exit_flag=4
11195 IF (founderror(exit_flag, pio_noerr, &
11196 & __line__, myfile)) THEN
11197 RETURN
11198 END IF
11199 END IF
11200 END IF
11201 END DO
11202
11203# ifdef BEDLOAD
11204
11205
11206
11207 DO i=1,nst
11208 IF (get_var(idubld(i))) THEN
11209 foundit=find_string(var_name, n_var, &
11210 & trim(vname(1,idubld(i))), vindex)
11211 IF (foundit) THEN
11213 my_piovar%gtype=u2dvar
11214 IF (kind(ocean(ng)%tl_bedldu).eq.8) THEN
11215 my_piovar%dkind=pio_double
11217 ELSE
11218 my_piovar%dkind=pio_real
11220 END IF
11221
11222 status=nf_fread2d(ng, idmod, ncname, piofile, &
11223 & vname(1,idubld(i)), my_piovar, &
11224 & inprec, iodesc, vsize, &
11225 & lbi, ubi, lbj, ubj, &
11226 & fscl, fmin, fmax, &
11227# ifdef MASKING
11228 & grid(ng) % umask, &
11229# endif
11230# ifdef CHECKSUM
11231 & sedbed(ng) % tl_bedldu(:,:,i), &
11232 & checksum = fhash)
11233# else
11234 & sedbed(ng) % tl_bedldu(:,:,i))
11235# endif
11236 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11237 IF (master) THEN
11238 WRITE (stdout,60) string, trim(vname(1,idubld(i))), &
11239 & inprec, trim(ncname)
11240 END IF
11241 exit_flag=2
11242 ioerror=status
11243 RETURN
11244 ELSE
11245 IF (master) THEN
11246# ifdef CHECKSUM
11247 WRITE (stdout,70) trim(vname(2,idubld(i))), &
11248 & fmin, fmax, fhash
11249# else
11250 WRITE (stdout,70) trim(vname(2,idubld(i))), &
11251 & fmin, fmax
11252# endif
11253 END IF
11254 END IF
11255 ELSE
11256 IF (master) THEN
11257 WRITE (stdout,80) string, trim(vname(1,idubld(i))), &
11258 & trim(ncname)
11259 END IF
11260 exit_flag=4
11261 IF (founderror(exit_flag, pio_noerr, &
11262 & __line__, myfile)) THEN
11263 RETURN
11264 END IF
11265 END IF
11266 END IF
11267
11268 IF (get_var(idvbld(i))) THEN
11269 foundit=find_string(var_name, n_var, &
11270 & trim(vname(1,idvbld(i))), vindex)
11271 IF (foundit) THEN
11273 my_piovar%gtype=v2dvar
11274 IF (kind(ocean(ng)%tl_bedldv).eq.8) THEN
11275 my_piovar%dkind=pio_double
11277 ELSE
11278 my_piovar%dkind=pio_real
11280 END IF
11281
11282 status=nf_fread2d(ng, idmod, ncname, piofile, &
11283 & vname(1,idvbld(i)), my_piovar, &
11284 & inprec, iodesc, vsize, &
11285 & lbi, ubi, lbj, ubj, &
11286 & fscl, fmin, fmax, &
11287# ifdef MASKING
11288 & grid(ng) % vmask, &
11289# endif
11290# ifdef CHECKSUM
11291 & sedbed(ng) % tl_bedldv(:,:,i), &
11292 & checksum = fhash)
11293# else
11294 & sedbed(ng) % tl_bedldv(:,:,i))
11295# endif
11296 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11297 IF (master) THEN
11298 WRITE (stdout,60) string, trim(vname(1,idvbld(i))), &
11299 & inprec, trim(ncname)
11300 END IF
11301 exit_flag=2
11302 ioerror=status
11303 RETURN
11304 ELSE
11305 IF (master) THEN
11306# ifdef CHECKSUM
11307 WRITE (stdout,70) trim(vname(2,idvbld(i))), &
11308 & fmin, fmax, fhash
11309# else
11310 WRITE (stdout,70) trim(vname(2,idvbld(i))), &
11311 & fmin, fmax
11312# endif
11313 END IF
11314 END IF
11315 ELSE
11316 IF (master) THEN
11317 WRITE (stdout,80) string, trim(vname(1,idvbld(i))), &
11318 & trim(ncname)
11319 END IF
11320 exit_flag=4
11321 IF (founderror(exit_flag, pio_noerr, &
11322 & __line__, myfile)) THEN
11323 RETURN
11324 END IF
11325 END IF
11326 END IF
11327 END DO
11328# endif
11329# endif
11330
11331# if defined SEDIMENT || defined BBL_MODEL
11332
11333
11334
11335 DO i=1,mbotp
11336 IF (get_var(idbott(i)).and.have_var(idbott(i))) THEN
11337 foundit=find_string(var_name, n_var, &
11338 & trim(vname(1,idbott(i))), vindex)
11339 IF (foundit) THEN
11341 my_piovar%gtype=r2dvar
11342 IF (kind(ocean(ng)%tl_bottom).eq.8) THEN
11343 my_piovar%dkind=pio_double
11345 ELSE
11346 my_piovar%dkind=pio_real
11348 END IF
11349
11350 status=nf_fread2d(ng, idmod, ncname, piofile, &
11351 & vname(1,idbott(i)), my_piovar, &
11352 & inprec, iodesc, vsize, &
11353 & lbi, ubi, lbj, ubj, &
11354 & fscl, fmin, fmax, &
11355# ifdef MASKING
11356 & grid(ng) % rmask, &
11357# endif
11358# ifdef CHECKSUM
11359 & sedbed(ng) % tl_bottom(:,:,i), &
11360 & checksum = fhash)
11361# else
11362 & sedbed(ng) % tl_bottom(:,:,i))
11363# endif
11364 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11365 IF (master) THEN
11366 WRITE (stdout,60) string, trim(vname(1,idbott(i))), &
11367 & inprec, trim(ncname)
11368 END IF
11369 exit_flag=2
11370 ioerror=status
11371 RETURN
11372 ELSE
11373 IF (master) THEN
11374# ifdef CHECKSUM
11375 WRITE (stdout,70) trim(vname(2,idbott(i))), &
11376 & fmin, fmax, fhash
11377# else
11378 WRITE (stdout,70) trim(vname(2,idbott(i))), &
11379 & fmin, fmax
11380# endif
11381 END IF
11382 END IF
11383 ELSE
11384 IF (master) THEN
11385 WRITE (stdout,80) string, trim(vname(1,idbott(i))), &
11386 & trim(ncname)
11387 END IF
11388 exit_flag=4
11389 IF (founderror(exit_flag, pio_noerr, &
11390 & __line__, myfile)) THEN
11391 RETURN
11392 END IF
11393 END IF
11394 END IF
11395 END DO
11396# endif
11397# endif
11398 END IF tlm_state
11399# endif
11400
11401# ifdef ADJOINT
11402
11403
11404
11405
11406
11407 adm_state: IF (model.eq.iadm) THEN
11408
11409
11410
11411 IF (get_var(idfsur)) THEN
11412 foundit=find_string(var_name, n_var, trim(vname(1,idfsur)), &
11413 & vindex)
11414 IF (foundit) THEN
11416 my_piovar%gtype=r2dvar
11417 IF (kind(ocean(ng)%ad_zeta).eq.8) THEN
11418 my_piovar%dkind=pio_double
11420 ELSE
11421 my_piovar%dkind=pio_real
11423 END IF
11424
11425 status=nf_fread2d(ng, idmod, ncname, piofile, &
11426 & vname(1,idfsur), my_piovar, &
11427 & inprec, iodesc, vsize, &
11428 & lbi, ubi, lbj, ubj, &
11429 & fscl, fmin, fmax, &
11430# ifdef MASKING
11431 & grid(ng) % rmask, &
11432# endif
11433# ifdef CHECKSUM
11434 & ocean(ng) % ad_zeta(:,:,tindex), &
11435 & checksum = fhash)
11436# else
11437 & ocean(ng) % ad_zeta(:,:,tindex))
11438# endif
11439 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11440 IF (master) THEN
11441 WRITE (stdout,60) string, trim(vname(1,idfsur)), &
11442 & inprec, trim(ncname)
11443 END IF
11444 exit_flag=2
11445 ioerror=status
11446 RETURN
11447 ELSE
11448 IF (master) THEN
11449# ifdef CHECKSUM
11450 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax, &
11451 & fhash
11452# else
11453 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax
11454# endif
11455 END IF
11456 END IF
11457 ELSE
11458 IF (master) THEN
11459 WRITE (stdout,80) string, trim(vname(1,idfsur)), &
11460 & trim(ncname)
11461 END IF
11462 exit_flag=4
11463 IF (founderror(exit_flag, pio_noerr, &
11464 & __line__, myfile)) THEN
11465 RETURN
11466 END IF
11467 END IF
11468 END IF
11469
11470# ifdef ADJUST_BOUNDARY
11471
11472
11473
11474 IF (get_var(idsbry(isfsur)).and. &
11475 & any(lobc(:,isfsur,ng))) THEN
11476 ifield=idsbry(isfsur)
11477 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
11478 & vindex)
11479 IF (foundit) THEN
11481 my_piovar%gtype=r2dobc
11482 IF (kind(boundary(ng)%ad_zeta_obc).eq.8) THEN
11483 my_piovar%dkind=pio_double
11485 ELSE
11486 my_piovar%dkind=pio_real
11488 END IF
11489
11490 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
11491 & vname(1,ifield), my_piovar, &
11492 & inprec, iodesc, &
11493 & lbij, ubij, nbrec(ng), &
11494 & fscl, fmin, fmax, &
11495# ifdef CHECKSUM
11496 & boundary(ng) % ad_zeta_obc(:,:,:, &
11497 & tindex), &
11498 & checksum = fhash)
11499# else
11500 & boundary(ng) % ad_zeta_obc(:,:,:, &
11501 & tindex))
11502# endif
11503 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11504 IF (master) THEN
11505 WRITE (stdout,60) string, trim(vname(1,ifield)), &
11506 & inprec, trim(ncname)
11507 END IF
11508 exit_flag=2
11509 ioerror=status
11510 RETURN
11511 ELSE
11512 IF (master) THEN
11513# ifdef CHECKSUM
11514 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
11515 & fhash
11516# else
11517 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
11518# endif
11519 END IF
11520 END IF
11521 ELSE
11522 IF (master) THEN
11523 WRITE (stdout,80) string, trim(vname(1,ifield)), &
11524 & trim(ncname)
11525 END IF
11526 exit_flag=4
11527 IF (founderror(exit_flag, pio_noerr, &
11528 & __line__, myfile)) THEN
11529 RETURN
11530 END IF
11531 END IF
11532 END IF
11533# endif
11534
11535
11536
11537 IF (get_var(idubar)) THEN
11538 foundit=find_string(var_name, n_var, trim(vname(1,idubar)), &
11539 & vindex)
11540 IF (foundit) THEN
11542 my_piovar%gtype=u2dvar
11543 IF (kind(ocean(ng)%ad_ubar).eq.8) THEN
11544 my_piovar%dkind=pio_double
11546 ELSE
11547 my_piovar%dkind=pio_real
11549 END IF
11550
11551 status=nf_fread2d(ng, idmod, ncname, piofile, &
11552 & vname(1,idubar), my_piovar, &
11553 & inprec, iodesc, vsize, &
11554 & lbi, ubi, lbj, ubj, &
11555 & fscl, fmin, fmax, &
11556# ifdef MASKING
11557 & grid(ng) % umask, &
11558# endif
11559# ifdef CHECKSUM
11560 & ocean(ng) % ad_ubar(:,:,tindex), &
11561 & checksum = fhash)
11562# else
11563 & ocean(ng) % ad_ubar(:,:,tindex))
11564# endif
11565 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11566 IF (master) THEN
11567 WRITE (stdout,60) string, trim(vname(1,idubar)), &
11568 & inprec, trim(ncname)
11569 END IF
11570 exit_flag=2
11571 ioerror=status
11572 RETURN
11573 ELSE
11574 IF (master) THEN
11575# ifdef CHECKSUM
11576 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax, &
11577 & fhash
11578# else
11579 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax
11580# endif
11581 END IF
11582 END IF
11583 ELSE
11584 IF (master) THEN
11585 WRITE (stdout,80) string, trim(vname(1,idubar)), &
11586 & trim(ncname)
11587 END IF
11588 exit_flag=4
11589 IF (founderror(exit_flag, pio_noerr, &
11590 & __line__, myfile)) THEN
11591 RETURN
11592 END IF
11593 END IF
11594 END IF
11595
11596# ifdef ADJUST_BOUNDARY
11597
11598
11599
11600 IF (get_var(idsbry(isubar)).and. &
11601 & any(lobc(:,isubar,ng))) THEN
11602 ifield=idsbry(isubar)
11603 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
11604 & vindex)
11605 IF (foundit) THEN
11607 my_piovar%gtype=u2dobc
11608 IF (kind(boundary(ng)%ad_ubar_obc).eq.8) THEN
11609 my_piovar%dkind=pio_double
11611 ELSE
11612 my_piovar%dkind=pio_real
11614 END IF
11615
11616 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
11617 & vname(1,ifield), my_piovar, &
11618 & inprec, iodesc, &
11619 & lbij, ubij, nbrec(ng), &
11620 & fscl, fmin, fmax, &
11621# ifdef CHECKSUM
11622 & boundary(ng) % ad_ubar_obc(:,:,:, &
11623 & tindex), &
11624 & checksum = fhash)
11625# else
11626 & boundary(ng) % ad_ubar_obc(:,:,:, &
11627 & tindex))
11628# endif
11629 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11630 IF (master) THEN
11631 WRITE (stdout,60) string, trim(vname(1,ifield)), &
11632 & inprec, trim(ncname)
11633 END IF
11634 exit_flag=2
11635 ioerror=status
11636 RETURN
11637 ELSE
11638 IF (master) THEN
11639# ifdef CHECKSUM
11640 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
11641 & fhash
11642# else
11643 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
11644# endif
11645 END IF
11646 END IF
11647 ELSE
11648 IF (master) THEN
11649 WRITE (stdout,80) string, trim(vname(1,ifield)), &
11650 & trim(ncname)
11651 END IF
11652 exit_flag=4
11653 IF (founderror(exit_flag, pio_noerr, &
11654 & __line__, myfile)) THEN
11655 RETURN
11656 END IF
11657 END IF
11658 END IF
11659# endif
11660
11661
11662
11663 IF (get_var(idvbar)) THEN
11664 foundit=find_string(var_name, n_var, trim(vname(1,idvbar)), &
11665 & vindex)
11666 IF (foundit) THEN
11668 my_piovar%gtype=v2dvar
11669 IF (kind(ocean(ng)%ad_vbar).eq.8) THEN
11670 my_piovar%dkind=pio_double
11672 ELSE
11673 my_piovar%dkind=pio_real
11675 END IF
11676
11677 status=nf_fread2d(ng, idmod, ncname, piofile, &
11678 & vname(1,idvbar), my_piovar, &
11679 & inprec, iodesc, vsize, &
11680 & lbi, ubi, lbj, ubj, &
11681 & fscl, fmin, fmax, &
11682# ifdef MASKING
11683 & grid(ng) % vmask, &
11684# endif
11685# ifdef CHECKSUM
11686 & ocean(ng) % ad_vbar(:,:,tindex), &
11687 & checksum = fhash)
11688# else
11689 & ocean(ng) % ad_vbar(:,:,tindex))
11690# endif
11691 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11692 IF (master) THEN
11693 WRITE (stdout,60) string, trim(vname(1,idvbar)), &
11694 & inprec, trim(ncname)
11695 END IF
11696 exit_flag=2
11697 ioerror=status
11698 RETURN
11699 ELSE
11700 IF (master) THEN
11701# ifdef CHECKSUM
11702 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax, &
11703 & fhash
11704# else
11705 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax
11706# endif
11707 END IF
11708 END IF
11709 ELSE
11710 IF (master) THEN
11711 WRITE (stdout,80) string, trim(vname(1,idvbar)), &
11712 & trim(ncname)
11713 END IF
11714 exit_flag=4
11715 IF (founderror(exit_flag, pio_noerr, &
11716 & __line__, myfile)) THEN
11717 RETURN
11718 END IF
11719 END IF
11720 END IF
11721
11722# ifdef ADJUST_BOUNDARY
11723
11724
11725
11726 IF (get_var(idsbry(isvbar)).and. &
11727 & any(lobc(:,isvbar,ng))) THEN
11728 ifield=idsbry(isvbar)
11729 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
11730 & vindex)
11731 IF (foundit) THEN
11733 my_piovar%gtype=v2dobc
11734 IF (kind(boundary(ng)%ad_vbar_obc).eq.8) THEN
11735 my_piovar%dkind=pio_double
11737 ELSE
11738 my_piovar%dkind=pio_real
11740 END IF
11741
11742 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
11743 & vname(1,ifield), my_piovar, &
11744 & inprec, iodesc, &
11745 & lbij, ubij, nbrec(ng), &
11746 & fscl, fmin, fmax, &
11747# ifdef CHECKSUM
11748 & boundary(ng) % ad_vbar_obc(:,:,:, &
11749 & tindex), &
11750 & checksum = fhash)
11751# else
11752 & boundary(ng) % ad_vbar_obc(:,:,:, &
11753 & tindex))
11754# endif
11755 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11756 IF (master) THEN
11757 WRITE (stdout,60) string, trim(vname(1,ifield)), &
11758 & inprec, trim(ncname)
11759 END IF
11760 exit_flag=2
11761 ioerror=status
11762 RETURN
11763 ELSE
11764 IF (master) THEN
11765# ifdef CHECKSUM
11766 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
11767 & fhash
11768# else
11769 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
11770# endif
11771
11772 END IF
11773 END IF
11774 ELSE
11775 IF (master) THEN
11776 WRITE (stdout,80) string, trim(vname(1,ifield)), &
11777 & trim(ncname)
11778 END IF
11779 exit_flag=4
11780 IF (founderror(exit_flag, pio_noerr, &
11781 & __line__, myfile)) THEN
11782 RETURN
11783 END IF
11784 END IF
11785 END IF
11786# endif
11787# ifdef ADJUST_WSTRESS
11788
11789
11790
11791 IF (get_var(idusms)) THEN
11792 foundit=find_string(var_name, n_var, trim(vname(1,idusms)), &
11793 & vindex)
11794 IF (foundit) THEN
11795 scale=1.0_dp
11797 my_piovar%gtype=u2dvar
11798 IF (kind(forces(ng)%ad_ustr).eq.8) THEN
11799 my_piovar%dkind=pio_double
11801 ELSE
11802 my_piovar%dkind=pio_real
11804 END IF
11805
11806 status=nf_fread3d(ng, idmod, ncname, piofile, &
11807 & vname(1,idusms), my_piovar, &
11808 & inprec, iodesc, vsize, &
11809 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
11810 & scale, fmin, fmax, &
11811# ifdef MASKING
11812 & grid(ng) % umask, &
11813# endif
11814# ifdef CHECKSUM
11815 & forces(ng) % ad_ustr(:,:,:,tindex), &
11816 & checksum = fhash)
11817# else
11818 & forces(ng) % ad_ustr(:,:,:,tindex))
11819# endif
11820 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11821 IF (master) THEN
11822 WRITE (stdout,60) string, trim(vname(1,idusms)), &
11823 & inprec, trim(ncname)
11824 END IF
11825 exit_flag=2
11826 ioerror=status
11827 RETURN
11828 ELSE
11829 IF (master) THEN
11830# ifdef CHECKSUM
11831 WRITE (stdout,70) trim(vname(2,idusms))// &
11832 & ', adjusted ad_ustr', fmin, fmax, &
11833 & fhash
11834# else
11835 WRITE (stdout,70) trim(vname(2,idusms))// &
11836 & ', adjusted ad_ustr', fmin, fmax
11837# endif
11838 END IF
11839 END IF
11840 ELSE
11841 IF (master) THEN
11842 WRITE (stdout,80) string, trim(vname(1,idusms)), &
11843 & trim(ncname)
11844 END IF
11845 exit_flag=4
11846 IF (founderror(exit_flag, pio_noerr, &
11847 & __line__, myfile)) THEN
11848 RETURN
11849 END IF
11850 END IF
11851 END IF
11852
11853
11854
11855 IF (get_var(idvsms)) THEN
11856 foundit=find_string(var_name, n_var, trim(vname(1,idvsms)), &
11857 & vindex)
11858 IF (foundit) THEN
11859 scale=1.0_dp
11861 my_piovar%gtype=v2dvar
11862 IF (kind(forces(ng)%ad_vstr).eq.8) THEN
11863 my_piovar%dkind=pio_double
11865 ELSE
11866 my_piovar%dkind=pio_real
11868 END IF
11869
11870 status=nf_fread3d(ng, idmod, ncname, piofile, &
11871 & vname(1,idvsms), my_piovar, &
11872 & inprec, iodesc, vsize, &
11873 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
11874 & scale, fmin, fmax, &
11875# ifdef MASKING
11876 & grid(ng) % vmask, &
11877# endif
11878# ifdef CHECKSUM
11879 & forces(ng) % ad_vstr(:,:,:,tindex), &
11880 & checksum = fhash)
11881# else
11882 & forces(ng) % ad_vstr(:,:,:,tindex))
11883# endif
11884 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11885 IF (master) THEN
11886 WRITE (stdout,60) string, trim(vname(1,idvsms)), &
11887 & inprec, trim(ncname)
11888 END IF
11889 exit_flag=2
11890 ioerror=status
11891 RETURN
11892 ELSE
11893 IF (master) THEN
11894# ifdef CHECKSUM
11895 WRITE (stdout,70) trim(vname(2,idvsms))// &
11896 & ', adjusted ad_vstr', fmin, fmax, &
11897 & fhash
11898# else
11899 WRITE (stdout,70) trim(vname(2,idvsms))// &
11900 & ', adjusted ad_vstr', fmin, fmax
11901# endif
11902 END IF
11903 END IF
11904 ELSE
11905 IF (master) THEN
11906 WRITE (stdout,80) string, trim(vname(1,idvsms)), &
11907 & trim(ncname)
11908 END IF
11909 exit_flag=4
11910 IF (founderror(exit_flag, pio_noerr, &
11911 & __line__, myfile)) THEN
11912 RETURN
11913 END IF
11914 END IF
11915 END IF
11916# endif
11917# ifdef SOLVE3D
11918
11919
11920
11921 IF (get_var(iduvel)) THEN
11922 foundit=find_string(var_name, n_var, trim(vname(1,iduvel)), &
11923 & vindex)
11924 IF (foundit) THEN
11926 my_piovar%gtype=u3dvar
11927 IF (kind(ocean(ng)%ad_u).eq.8) THEN
11928 my_piovar%dkind=pio_double
11930 ELSE
11931 my_piovar%dkind=pio_real
11933 END IF
11934
11935 status=nf_fread3d(ng, idmod, ncname, piofile, &
11936 & vname(1,iduvel), my_piovar, &
11937 & inprec, iodesc, vsize, &
11938 & lbi, ubi, lbj, ubj, 1, n(ng), &
11939 & fscl, fmin, fmax, &
11940# ifdef MASKING
11941 & grid(ng) % umask, &
11942# endif
11943# ifdef CHECKSUM
11944 & ocean(ng) % ad_u(:,:,:,tindex), &
11945 & checksum = fhash)
11946# else
11947 & ocean(ng) % ad_u(:,:,:,tindex))
11948# endif
11949 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
11950 IF (master) THEN
11951 WRITE (stdout,60) string, trim(vname(1,iduvel)), &
11952 & inprec, trim(ncname)
11953 END IF
11954 exit_flag=2
11955 ioerror=status
11956 RETURN
11957 ELSE
11958 IF (master) THEN
11959# ifdef CHECKSUM
11960 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax, &
11961 & fhash
11962# else
11963 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax
11964# endif
11965
11966 END IF
11967 END IF
11968 ELSE
11969 IF (master) THEN
11970 WRITE (stdout,80) string, trim(vname(1,iduvel)), &
11971 & trim(ncname)
11972 END IF
11973 exit_flag=4
11974 IF (founderror(exit_flag, pio_noerr, &
11975 & __line__, myfile)) THEN
11976 RETURN
11977 END IF
11978 END IF
11979 END IF
11980
11981# ifdef ADJUST_BOUNDARY
11982
11983
11984
11985 IF (get_var(idsbry(isuvel)).and. &
11986 & any(lobc(:,isuvel,ng))) THEN
11987 ifield=idsbry(isuvel)
11988 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
11989 & vindex)
11990 IF (foundit) THEN
11992 my_piovar%gtype=u3dobc
11993 IF (kind(boundary(ng)%ad_u_obc).eq.8) THEN
11994 my_piovar%dkind=pio_double
11996 ELSE
11997 my_piovar%dkind=pio_real
11999 END IF
12000
12001 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
12002 & vname(1,ifield), my_piovar, &
12003 & inprec, iodesc, &
12004 & lbij, ubij, 1, n(ng), nbrec(ng), &
12005 & fscl, fmin, fmax, &
12006# ifdef CHECKSUM
12007 & boundary(ng) % ad_u_obc(:,:,:,:, &
12008 & tindex), &
12009 & checksum = fhash)
12010# else
12011 & boundary(ng) % ad_u_obc(:,:,:,:, &
12012 & tindex))
12013# endif
12014 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12015 IF (master) THEN
12016 WRITE (stdout,60) string, trim(vname(1,ifield)), &
12017 & inprec, trim(ncname)
12018 END IF
12019 exit_flag=2
12020 ioerror=status
12021 RETURN
12022 ELSE
12023 IF (master) THEN
12024# ifdef CHECKSUM
12025 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
12026 & fhash
12027# else
12028 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
12029# endif
12030 END IF
12031 END IF
12032 ELSE
12033 IF (master) THEN
12034 WRITE (stdout,80) string, trim(vname(1,ifield)), &
12035 & trim(ncname)
12036 END IF
12037 exit_flag=4
12038 IF (founderror(exit_flag, pio_noerr, &
12039 & __line__, myfile)) THEN
12040 RETURN
12041 END IF
12042 END IF
12043 END IF
12044# endif
12045
12046
12047
12048 IF (get_var(idvvel)) THEN
12049 foundit=find_string(var_name, n_var, trim(vname(1,idvvel)), &
12050 & vindex)
12051 IF (foundit) THEN
12053 my_piovar%gtype=v3dvar
12054 IF (kind(ocean(ng)%ad_v).eq.8) THEN
12055 my_piovar%dkind=pio_double
12057 ELSE
12058 my_piovar%dkind=pio_real
12060 END IF
12061
12062 status=nf_fread3d(ng, idmod, ncname, piofile, &
12063 & vname(1,idvvel), my_piovar, &
12064 & inprec, iodesc, vsize, &
12065 & lbi, ubi, lbj, ubj, 1, n(ng), &
12066 & fscl, fmin, fmax, &
12067# ifdef MASKING
12068 & grid(ng) % vmask, &
12069# endif
12070# ifdef CHECKSUM
12071 & ocean(ng) % ad_v(:,:,:,tindex), &
12072 & checksum = fhash)
12073# else
12074 & ocean(ng) % ad_v(:,:,:,tindex))
12075# endif
12076 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12077 IF (master) THEN
12078 WRITE (stdout,60) string, trim(vname(1,idvvel)), &
12079 & inprec, trim(ncname)
12080 END IF
12081 exit_flag=2
12082 ioerror=status
12083 RETURN
12084 ELSE
12085 IF (master) THEN
12086# ifdef CHECKSUM
12087 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax, &
12088 & fhash
12089# else
12090 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax
12091# endif
12092
12093 END IF
12094 END IF
12095 ELSE
12096 IF (master) THEN
12097 WRITE (stdout,80) string, trim(vname(1,idvvel)), &
12098 & trim(ncname)
12099 END IF
12100 exit_flag=4
12101 IF (founderror(exit_flag, pio_noerr, &
12102 & __line__, myfile)) THEN
12103 RETURN
12104 END IF
12105 END IF
12106 END IF
12107
12108# ifdef ADJUST_BOUNDARY
12109
12110
12111
12112 IF (get_var(idsbry(isvvel)).and. &
12113 & any(lobc(:,isvvel,ng))) THEN
12114 ifield=idsbry(isvvel)
12115 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
12116 & vindex)
12117 IF (foundit) THEN
12119 my_piovar%gtype=v3dobc
12120 IF (kind(boundary(ng)%ad_v_obc).eq.8) THEN
12121 my_piovar%dkind=pio_double
12123 ELSE
12124 my_piovar%dkind=pio_real
12126 END IF
12127
12128 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
12129 & vname(1,ifield), my_piovar, &
12130 & inprec, iodesc, &
12131 & lbij, ubij, 1, n(ng), nbrec(ng), &
12132 & fscl, fmin, fmax, &
12133# ifdef CHECKSUM
12134 & boundary(ng) % ad_v_obc(:,:,:,:, &
12135 & tindex), &
12136 & checksum = fhash)
12137# else
12138 & boundary(ng) % ad_v_obc(:,:,:,:, &
12139 & tindex))
12140# endif
12141 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12142 IF (master) THEN
12143 WRITE (stdout,60) string, trim(vname(1,ifield)), &
12144 & inprec, trim(ncname)
12145 END IF
12146 exit_flag=2
12147 ioerror=status
12148 RETURN
12149 ELSE
12150 IF (master) THEN
12151# ifdef CHECKSUM
12152 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
12153 & fhash
12154# else
12155 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
12156# endif
12157 END IF
12158 END IF
12159 ELSE
12160 IF (master) THEN
12161 WRITE (stdout,80) string, trim(vname(1,ifield)), &
12162 & trim(ncname)
12163 END IF
12164 exit_flag=4
12165 IF (founderror(exit_flag, pio_noerr, &
12166 & __line__, myfile)) THEN
12167 RETURN
12168 END IF
12169 END IF
12170 END IF
12171# endif
12172
12173
12174
12175 DO itrc=1,nt(ng)
12176 IF (get_var(idtvar(itrc))) THEN
12177 foundit=find_string(var_name, n_var, &
12178 & trim(vname(1,idtvar(itrc))), vindex)
12179 IF (foundit) THEN
12181 my_piovar%gtype=r3dvar
12182 IF (kind(ocean(ng)%ad_t).eq.8) THEN
12183 my_piovar%dkind=pio_double
12185 ELSE
12186 my_piovar%dkind=pio_real
12188 END IF
12189
12190 status=nf_fread3d(ng, idmod, ncname, piofile, &
12191 & vname(1,idtvar(itrc)), my_piovar, &
12192 & inprec, iodesc, vsize, &
12193 & lbi, ubi, lbj, ubj, 1, n(ng), &
12194 & fscl, fmin, fmax, &
12195# ifdef MASKING
12196 & grid(ng) % rmask, &
12197# endif
12198# ifdef CHECKSUM
12199 & ocean(ng) % ad_t(:,:,:,tindex,itrc), &
12200 & checksum = fhash)
12201# else
12202 & ocean(ng) % ad_t(:,:,:,tindex,itrc))
12203# endif
12204 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12205 IF (master) THEN
12206 WRITE (stdout,60) string, trim(vname(1,idtvar(itrc))),&
12207 & inprec, trim(ncname)
12208 END IF
12209 exit_flag=2
12210 ioerror=status
12211 RETURN
12212 ELSE
12213 IF (master) THEN
12214# ifdef CHECKSUM
12215 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
12216 & fmin, fmin, fhash
12217# else
12218 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
12219 & fmin, fmax
12220# endif
12221 END IF
12222 END IF
12223 ELSE
12224 IF (master) THEN
12225 WRITE (stdout,80) string, trim(vname(1,idtvar(itrc))), &
12226 & trim(ncname)
12227 END IF
12228 exit_flag=4
12229 IF (founderror(exit_flag, pio_noerr, &
12230 & __line__, myfile)) THEN
12231 RETURN
12232 END IF
12233 END IF
12234 END IF
12235 END DO
12236
12237# ifdef ADJUST_BOUNDARY
12238
12239
12240
12241 DO itrc=1,nt(ng)
12242 IF (get_var(idsbry(istvar(itrc))).and. &
12243 & any(lobc(:,istvar(itrc),ng))) THEN
12244 ifield=idsbry(istvar(itrc))
12245 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
12246 & vindex)
12247 IF (foundit) THEN
12249 my_piovar%gtype=r3dobc
12250 IF (kind(boundary(ng)%ad_t_obc).eq.8) THEN
12251 my_piovar%dkind=pio_double
12253 ELSE
12254 my_piovar%dkind=pio_real
12256 END IF
12257
12258 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
12259 & vname(1,ifield), my_piovar, &
12260 & inprec, iodesc, &
12261 & lbij, ubij, 1, n(ng), nbrec(ng), &
12262 & fscl, fmin, fmax, &
12263# ifdef CHECKSUM
12264 & boundary(ng) % ad_t_obc(:,:,:,:, &
12265 & tindex,itrc), &
12266 & checksum = fhash)
12267# else
12268 & boundary(ng) % ad_t_obc(:,:,:,:, &
12269 & tindex,itrc))
12270# endif
12271 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12272 IF (master) THEN
12273 WRITE (stdout,60) string, trim(vname(1,ifield)), &
12274 & inprec, trim(ncname)
12275 END IF
12276 exit_flag=2
12277 ioerror=status
12278 RETURN
12279 ELSE
12280 IF (master) THEN
12281# ifdef CHECKSUM
12282 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
12283 & fhash
12284# else
12285 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
12286# endif
12287 END IF
12288 END IF
12289 ELSE
12290 IF (master) THEN
12291 WRITE (stdout,80) string, trim(vname(1,ifield)), &
12292 & trim(ncname)
12293 END IF
12294 exit_flag=4
12295 IF (founderror(exit_flag, pio_noerr, &
12296 & __line__, myfile)) THEN
12297 RETURN
12298 END IF
12299 END IF
12300 END IF
12301 END DO
12302# endif
12303# ifdef ADJUST_STFLUX
12304
12305
12306
12307 DO itrc=1,nt(ng)
12308 IF (get_var(idtsur(itrc)).and.lstflux(itrc,ng)) THEN
12309 foundit=find_string(var_name, n_var, &
12310 & trim(vname(1,idtsur(itrc))), vindex)
12311 IF (foundit) THEN
12312 scale=1.0_dp
12314 my_piovar%gtype=r2dvar
12315 IF (kind(forces(ng)%ad_tflux).eq.8) THEN
12316 my_piovar%dkind=pio_double
12318 ELSE
12319 my_piovar%dkind=pio_real
12321 END IF
12322
12323 status=nf_fread3d(ng, idmod, ncname, piofile, &
12324 & vname(1,idtsur(itrc)), my_piovar, &
12325 & inprec, iodesc, vsize, &
12326 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
12327 & scale, fmin, fmax, &
12328# ifdef MASKING
12329 & grid(ng) % rmask, &
12330# endif
12331# ifdef CHECKSUM
12332 & forces(ng) % ad_tflux(:,:,:, &
12333 & tindex,itrc), &
12334 & checksum = fhash)
12335# else
12336 & forces(ng) % ad_tflux(:,:,:, &
12337 & tindex,itrc))
12338# endif
12339 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12340 IF (master) THEN
12341 WRITE (stdout,60) string, trim(vname(1,idtsur(itrc))),&
12342 & inprec, trim(ncname)
12343 END IF
12344 exit_flag=2
12345 ioerror=status
12346 RETURN
12347 ELSE
12348 IF (master) THEN
12349# ifdef CHECKSUM
12350 WRITE (stdout,70) trim(vname(2,idtsur(itrc)))// &
12351 & ', adjusted ad_tflux', fmin, fmax, &
12352 & fhash
12353# else
12354 WRITE (stdout,70) trim(vname(2,idtsur(itrc)))// &
12355 & ', adjusted ad_tflux', fmin, fmax
12356# endif
12357 END IF
12358 END IF
12359 ELSE
12360 IF (master) THEN
12361 WRITE (stdout,80) string, trim(vname(1,idtsur(itrc))), &
12362 & trim(ncname)
12363 END IF
12364 exit_flag=4
12365 IF (founderror(exit_flag, pio_noerr, &
12366 & __line__, myfile)) THEN
12367 RETURN
12368 END IF
12369 END IF
12370 END IF
12371 END DO
12372# endif
12373# ifdef SEDIMENT
12374
12375
12376
12377
12378 DO i=1,nst
12379 IF (get_var(idfrac(i))) THEN
12380 foundit=find_string(var_name, n_var, &
12381 & trim(vname(1,idfrac(i))), vindex)
12382 IF (foundit) THEN
12384 my_piovar%gtype=b3dvar
12385 IF (kind(sedbed(ng)%ad_bed_frac).eq.8) THEN
12386 my_piovar%dkind=pio_double
12388 ELSE
12389 my_piovar%dkind=pio_real
12391 END IF
12392
12393 status=nf_fread3d(ng, idmod, ncname, piofile, &
12394 & vname(1,idfrac(i)), my_piovar, &
12395 & inprec, iodesc, vsize, &
12396 & lbi, ubi, lbj, ubj, 1, nbed, &
12397 & fscl, fmin, fmax, &
12398# ifdef MASKING
12399 & grid(ng) % rmask, &
12400# endif
12401# ifdef CHECKSUM
12402 & sedbed(ng) % ad_bed_frac(:,:,:,i), &
12403 & checksum = fhash)
12404# else
12405 & sedbed(ng) % ad_bed_frac(:,:,:,i))
12406# endif
12407 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12408 IF (master) THEN
12409 WRITE (stdout,60) string, trim(vname(1,idfrac(i))), &
12410 & inprec, trim(ncname)
12411 END IF
12412 exit_flag=2
12413 ioerror=status
12414 RETURN
12415 ELSE
12416 IF (master) THEN
12417# ifdef CHECKSUM
12418 WRITE (stdout,70) trim(vname(2,idfrac(i))), &
12419 & fmin, fmax, fhash
12420# else
12421 WRITE (stdout,70) trim(vname(2,idfrac(i))), &
12422 & fmin, fmax
12423# endif
12424 END IF
12425 END IF
12426 ELSE
12427 IF (master) THEN
12428 WRITE (stdout,80) string, trim(vname(1,idfrac(i))), &
12429 & trim(ncname)
12430 END IF
12431 exit_flag=4
12432 IF (founderror(exit_flag, pio_noerr, &
12433 & __line__, myfile)) THEN
12434 RETURN
12435 END IF
12436 END IF
12437 END IF
12438
12439
12440
12441 IF (get_var(idbmas(i))) THEN
12442 foundit=find_string(var_name, n_var,
12443 & trim(vname(1,idbmas(i))), vindex)
12444 IF (foundit) THEN
12446 my_piovar%gtype=b3dvar
12447 IF (kind(sedbed(ng)%ad_bed_mass).eq.8) THEN
12448 my_piovar%dkind=pio_double
12450 ELSE
12451 my_piovar%dkind=pio_real
12453 END IF
12454
12455 status=nf_fread3d(ng, idmod, ncname, piofile, &
12456 & vname(1,idbmas(i)), my_piovar, &
12457 & inprec, iodesc, vsize, &
12458 & lbi, ubi, lbj, ubj, 1, nbed, &
12459 & fscl, fmin, fmax, &
12460# ifdef MASKING
12461 & grid(ng) % rmask, &
12462# endif
12463# ifdef CHECKSUM
12464 & sedbed(ng) % ad_bed_mass(:,:,:, &
12465 tindex,i), &
12466 & checksum = fhash)
12467# else
12468 & sedbed(ng) % ad_bed_mass(:,:,:, &
12469 & tindex,i))
12470# endif
12471 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12472 IF (master) THEN
12473 WRITE (stdout,60) string, trim(vname(1,idbmas(i))), &
12474 & inprec, trim(ncname)
12475 END IF
12476 exit_flag=2
12477 ioerror=status
12478 RETURN
12479 ELSE
12480 IF (master) THEN
12481# ifdef CHECKSUM
12482 WRITE (stdout,70) trim(vname(2,idbmas(i))), &
12483 & fmin, fmax, fhash
12484# else
12485 WRITE (stdout,70) trim(vname(2,idbmas(i))), &
12486 & fmin, fmax
12487# endif
12488 END IF
12489 END IF
12490 ELSE
12491 IF (master) THEN
12492 WRITE (stdout,80) string, trim(vname(1,idbmas(i))), &
12493 & trim(ncname)
12494 END IF
12495 exit_flag=4
12496 IF (founderror(exit_flag, pio_noerr, &
12497 & __line__, myfile)) THEN
12498 RETURN
12499 END IF
12500 END IF
12501 END IF
12502 END DO
12503
12504
12505
12506 DO i=1,mbedp
12507 IF (get_var(idsbed(i))) THEN
12508 foundit=find_string(var_name, n_var, &
12509 & trim(vname(1,idsbed(i))), vindex)
12510 IF (foundit) THEN
12512 my_piovar%gtype=b3dvar
12513 IF (kind(sedbed(ng)%ad_bed).eq.8) THEN
12514 my_piovar%dkind=pio_double
12516 ELSE
12517 my_piovar%dkind=pio_real
12519 END IF
12520
12521 status=nf_fread3d(ng, idmod, ncname, piofile, &
12522 & vname(1,idsbed(i)), my_piovar, &
12523 & inprec, iodesc, vsize, &
12524 & lbi, ubi, lbj, ubj, 1, nbed, &
12525 & fscl, fmin, fmax, &
12526# ifdef MASKING
12527 & grid(ng) % rmask, &
12528# endif
12529# ifdef CHECKSUM
12530 & sedbed(ng) % ad_bed(:,:,:,i), &
12531 & checksum = fhash)
12532# else
12533 & sedbed(ng) % ad_bed(:,:,:,i))
12534# endif
12535 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12536 IF (master) THEN
12537 WRITE (stdout,60) string, trim(vname(1,idsbed(i))), &
12538 & inprec, trim(ncname)
12539 END IF
12540 exit_flag=2
12541 ioerror=status
12542 RETURN
12543 ELSE
12544 IF (master) THEN
12545# ifdef CHECKSUM
12546 WRITE (stdout,70) trim(vname(2,idsbed(i))), &
12547 & fmin, fmax, fhash
12548# else
12549 WRITE (stdout,70) trim(vname(2,idsbed(i))), &
12550 & fmin, fmax
12551# endif
12552 END IF
12553 END IF
12554 ELSE
12555 IF (master) THEN
12556 WRITE (stdout,80) string, trim(vname(1,idsbed(i))), &
12557 & trim(ncname)
12558 END IF
12559 exit_flag=4
12560 IF (founderror(exit_flag, pio_noerr, &
12561 & __line__, myfile)) THEN
12562 RETURN
12563 END IF
12564 END IF
12565 END IF
12566 END DO
12567
12568# ifdef BEDLOAD
12569
12570
12571
12572 DO i=1,nst
12573 IF (get_var(idubld(i))) THEN
12574 foundit=find_string(var_name, n_var, &
12575 & trim(vname(1,idubld(i))), vindex)
12576 IF (foundit) THEN
12578 my_piovar%gtype=u2dvar
12579 IF (kind(sedbed(ng)%ad_bedldu).eq.8) THEN
12580 my_piovar%dkind=pio_double
12582 ELSE
12583 my_piovar%dkind=pio_real
12585 END IF
12586
12587 status=nf_fread2d(ng, idmod, ncname, piofile, &
12588 & vname(1,idubld(i)), my_piovar, &
12589 & inprec, iodesc, vsize, &
12590 & lbi, ubi, lbj, ubj, &
12591 & fscl, fmin, fmax, &
12592# ifdef MASKING
12593 & grid(ng) % umask, &
12594# endif
12595# ifdef CHECKSUM
12596 & sedbed(ng) % ad_bedldu(:,:,i), &
12597 & checksum = fhash)
12598# else
12599 & sedbed(ng) % ad_bedldu(:,:,i))
12600# endif
12601 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12602 IF (master) THEN
12603 WRITE (stdout,60) string, trim(vname(1,idubld(i))), &
12604 & inprec, trim(ncname)
12605 END IF
12606 exit_flag=2
12607 ioerror=status
12608 RETURN
12609 ELSE
12610 IF (master) THEN
12611# ifdef CHECKSUM
12612 WRITE (stdout,70) trim(vname(2,idubld(i))), &
12613 & fmin, fmax, fhash
12614# else
12615 WRITE (stdout,70) trim(vname(2,idubld(i))), &
12616 & fmin, fmax
12617# endif
12618 END IF
12619 END IF
12620 ELSE
12621 IF (master) THEN
12622 WRITE (stdout,80) string, trim(vname(1,idubld(i))), &
12623 & trim(ncname)
12624 END IF
12625 exit_flag=4
12626 IF (founderror(exit_flag, pio_noerr, &
12627 & __line__, myfile)) THEN
12628 RETURN
12629 END IF
12630 END IF
12631 END IF
12632
12633 IF (get_var(idvbld(i))) THEN
12634 foundit=find_string(var_name, n_var, &
12635 & trim(vname(1,idvbld(i))), vindex)
12636 IF (foundit) THEN
12638 my_piovar%gtype=v2dvar
12639 IF (kind(sedbed(ng)%ad_bedldv).eq.8) THEN
12640 my_piovar%dkind=pio_double
12642 ELSE
12643 my_piovar%dkind=pio_real
12645 END IF
12646
12647 status=nf_fread2d(ng, idmod, ncname, piofile, &
12648 & vname(1,idvbld(i)), my_piovar, &
12649 & inprec, iodesc, vsize, &
12650 & lbi, ubi, lbj, ubj, &
12651 & fscl, fmin, fmax, &
12652# ifdef MASKING
12653 & grid(ng) % vmask, &
12654# endif
12655# ifdef CHECKSUM
12656 & sedbed(ng) % ad_bedldv(:,:,i), &
12657 & checksum = fhash)
12658# else
12659 & sedbed(ng) % ad_bedldv(:,:,i))
12660# endif
12661 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12662 IF (master) THEN
12663 WRITE (stdout,60) string, trim(vname(1,idvbld(i))), &
12664 & inprec, trim(ncname)
12665 END IF
12666 exit_flag=2
12667 ioerror=status
12668 RETURN
12669 ELSE
12670 IF (master) THEN
12671# ifdef CHECKSUM
12672 WRITE (stdout,70) trim(vname(2,idvbld(i))), &
12673 & fmin, fmax, fhash
12674# else
12675 WRITE (stdout,70) trim(vname(2,idvbld(i))), &
12676 & fmin, fmax
12677# endif
12678 END IF
12679 END IF
12680 ELSE
12681 IF (master) THEN
12682 WRITE (stdout,80) string, trim(vname(1,idvbld(i))), &
12683 & trim(ncname)
12684 END IF
12685 exit_flag=4
12686 IF (founderror(exit_flag, pio_noerr, &
12687 & __line__, myfile)) THEN
12688 RETURN
12689 END IF
12690 END IF
12691 END IF
12692 END DO
12693# endif
12694# endif
12695# if defined SEDIMENT || defined BBL_MODEL
12696
12697
12698
12699 DO i=1,mbotp
12700 IF (get_var(idbott(i)).and.have_var(idbott(i))) THEN
12701 foundit=find_string(var_name, n_var, &
12702 & trim(vname(1,idbott(i))), vindex)
12703 IF (foundit) THEN
12705 my_piovar%gtype=r2dvar
12706 IF (kind(sedbed(ng)%tl_bottom).eq.8) THEN
12707 my_piovar%dkind=pio_double
12709 ELSE
12710 my_piovar%dkind=pio_real
12712 END IF
12713
12714 status=nf_fread2d(ng, idmod, ncname, piofile, &
12715 & vname(1,idbott(i)), my_piovar, &
12716 & inprec, iodesc, vsize, &
12717 & lbi, ubi, lbj, ubj, &
12718 & fscl, fmin, fmax, &
12719# ifdef MASKING
12720 & grid(ng) % rmask, &
12721# endif
12722# ifdef CHECKSUM
12723 & sedbed(ng) % ad_bottom(:,:,i), &
12724 & checksum = fhash)
12725# else
12726 & sedbed(ng) % ad_bottom(:,:,i))
12727# endif
12728 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12729 IF (master) THEN
12730 WRITE (stdout,60) string, trim(vname(1,idbott(i))), &
12731 & inprec, trim(ncname)
12732 END IF
12733 exit_flag=2
12734 ioerror=status
12735 RETURN
12736 ELSE
12737 IF (master) THEN
12738# ifdef CHECKSUM
12739 WRITE (stdout,70) trim(vname(2,idbott(i))), &
12740 & fmin, fmax, fhash
12741# else
12742 WRITE (stdout,70) trim(vname(2,idbott(i))), &
12743 & fmin, fmax
12744# endif
12745 END IF
12746 END IF
12747 ELSE
12748 IF (master) THEN
12749 WRITE (stdout,80) string, trim(vname(1,idbott(i))), &
12750 & trim(ncname)
12751 END IF
12752 exit_flag=4
12753 IF (founderror(exit_flag, pio_noerr, &
12754 & __line__, myfile)) THEN
12755 RETURN
12756 END IF
12757 END IF
12758 END IF
12759 END DO
12760# endif
12761# endif
12762 END IF adm_state
12763# endif
12764
12765# ifdef FOUR_DVAR
12766
12767
12768
12769
12770
12771 nrm_state: IF ((model.eq.14).or. &
12772 & (model.eq.15).or. &
12773 & (model.eq.16).or. &
12774 & (model.eq.17)) THEN
12775
12776
12777
12778 IF (get_var(idfsur).and.((model.eq.14).or.(model.eq.15))) THEN
12779 foundit=find_string(var_name, n_var, trim(vname(1,idfsur)), &
12780 & vindex)
12781 IF (foundit) THEN
12783 my_piovar%gtype=r2dvar
12784 IF (kind(ocean(ng)%b_zeta).eq.8) THEN
12785 my_piovar%dkind=pio_double
12787 ELSE
12788 my_piovar%dkind=pio_real
12790 END IF
12791
12792 status=nf_fread2d(ng, idmod, ncname, piofile, &
12793 & vname(1,idfsur), my_piovar, &
12794 & inprec, iodesc, vsize, &
12795 & lbi, ubi, lbj, ubj, &
12796 & fscl, fmin, fmax, &
12797# ifdef MASKING
12798 & grid(ng) % rmask, &
12799# endif
12800# ifdef CHECKSUM
12801 & ocean(ng) % b_zeta(:,:,tindex), &
12802 & checksum = fhash)
12803# else
12804 & ocean(ng) % b_zeta(:,:,tindex))
12805# endif
12806 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12807 IF (master) THEN
12808 WRITE (stdout,60) string, trim(vname(1,idfsur)), &
12809 & inprec, trim(ncname)
12810 END IF
12811 exit_flag=2
12812 ioerror=status
12813 RETURN
12814 ELSE
12815 IF (master) THEN
12816# ifdef CHECKSUM
12817 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax, &
12818 & fhash
12819# else
12820 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax
12821# endif
12822
12823 END IF
12824 END IF
12825# ifdef DISTRIBUTE
12826 CALL mp_exchange2d (ng, myrank, idmod, 1, &
12827 & lbi, ubi, lbj, ubj, &
12828 & nghostpoints, &
12829 & ewperiodic(ng), nsperiodic(ng), &
12830 & ocean(ng) % b_zeta(:,:,tindex))
12831# endif
12832 ELSE
12833 IF (master) THEN
12834 WRITE (stdout,80) string, trim(vname(1,idfsur)), &
12835 & trim(ncname)
12836 END IF
12837 exit_flag=4
12838 IF (founderror(exit_flag, pio_noerr, &
12839 & __line__, myfile)) THEN
12840 RETURN
12841 END IF
12842 END IF
12843 END IF
12844
12845
12846
12847 IF (get_var(idubar).and.((model.eq.14).or.(model.eq.15))) THEN
12848 foundit=find_string(var_name, n_var, trim(vname(1,idubar)), &
12849 & vindex)
12850 IF (foundit) THEN
12852 my_piovar%gtype=u2dvar
12853 IF (kind(ocean(ng)%b_ubar).eq.8) THEN
12854 my_piovar%dkind=pio_double
12856 ELSE
12857 my_piovar%dkind=pio_real
12859 END IF
12860
12861 status=nf_fread2d(ng, idmod, ncname, piofile, &
12862 & vname(1,idubar), my_piovar, &
12863 & inprec, iodesc, vsize, &
12864 & lbi, ubi, lbj, ubj, &
12865 & fscl, fmin, fmax, &
12866# ifdef MASKING
12867 & grid(ng) % umask, &
12868# endif
12869# ifdef CHECKSUM
12870 & ocean(ng) % b_ubar(:,:,tindex), &
12871 & checksum = fhash)
12872# else
12873 & ocean(ng) % b_ubar(:,:,tindex))
12874# endif
12875 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12876 IF (master) THEN
12877 WRITE (stdout,60) string, trim(vname(1,idubar)), &
12878 & inprec, trim(ncname)
12879 END IF
12880 exit_flag=2
12881 ioerror=status
12882 RETURN
12883 ELSE
12884 IF (master) THEN
12885# ifdef CHECKSUM
12886 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax, &
12887 & fhash
12888# else
12889 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax
12890# endif
12891 END IF
12892 END IF
12893# ifdef DISTRIBUTE
12894 CALL mp_exchange2d (ng, myrank, idmod, 1, &
12895 & lbi, ubi, lbj, ubj, &
12896 & nghostpoints, &
12897 & ewperiodic(ng), nsperiodic(ng), &
12898 & ocean(ng) % b_ubar(:,:,tindex))
12899# endif
12900 ELSE
12901 IF (master) THEN
12902 WRITE (stdout,80) string, trim(vname(1,idubar)), &
12903 & trim(ncname)
12904 END IF
12905 exit_flag=4
12906 IF (founderror(exit_flag, pio_noerr, &
12907 & __line__, myfile)) THEN
12908 RETURN
12909 END IF
12910 END IF
12911 END IF
12912
12913
12914
12915 IF (get_var(idvbar).and.((model.eq.14).or.(model.eq.15))) THEN
12916 foundit=find_string(var_name, n_var, trim(vname(1,idvbar)), &
12917 & vindex)
12918 IF (foundit) THEN
12920 my_piovar%gtype=v2dvar
12921 IF (kind(ocean(ng)%b_vbar).eq.8) THEN
12922 my_piovar%dkind=pio_double
12924 ELSE
12925 my_piovar%dkind=pio_real
12927 END IF
12928
12929 status=nf_fread2d(ng, idmod, ncname, piofile, &
12930 & vname(1,idvbar), my_piovar, &
12931 & inprec, iodesc, vsize, &
12932 & lbi, ubi, lbj, ubj, &
12933 & fscl, fmin, fmax, &
12934# ifdef MASKING
12935 & grid(ng) % vmask, &
12936# endif
12937# ifdef CHECKSUM
12938 & ocean(ng) % b_vbar(:,:,tindex), &
12939 & checksum = fhash)
12940# else
12941 & ocean(ng) % b_vbar(:,:,tindex))
12942# endif
12943 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
12944 IF (master) THEN
12945 WRITE (stdout,60) string, trim(vname(1,idvbar)), &
12946 & inprec, trim(ncname)
12947 END IF
12948 exit_flag=2
12949 ioerror=status
12950 RETURN
12951 ELSE
12952 IF (master) THEN
12953# ifdef CHECKSUM
12954 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax, &
12955 & fhash
12956# else
12957 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax
12958# endif
12959 END IF
12960 END IF
12961# ifdef DISTRIBUTE
12962 CALL mp_exchange2d (ng, myrank, idmod, 1, &
12963 & lbi, ubi, lbj, ubj, &
12964 & nghostpoints, &
12965 & ewperiodic(ng), nsperiodic(ng), &
12966 & ocean(ng) % b_vbar(:,:,tindex))
12967# endif
12968 ELSE
12969 IF (master) THEN
12970 WRITE (stdout,80) string, trim(vname(1,idvbar)), &
12971 & trim(ncname)
12972 END IF
12973 exit_flag=4
12974 IF (founderror(exit_flag, pio_noerr, &
12975 & __line__, myfile)) THEN
12976 RETURN
12977 END IF
12978
12979 END IF
12980 END IF
12981
12982# ifdef SOLVE3D
12983
12984
12985
12986 IF (get_var(iduvel).and.((model.eq.14).or.(model.eq.15))) THEN
12987 foundit=find_string(var_name, n_var, trim(vname(1,iduvel)), &
12988 & vindex)
12989 IF (foundit) THEN
12991 my_piovar%gtype=u3dvar
12992 IF (kind(ocean(ng)%b_u).eq.8) THEN
12993 my_piovar%dkind=pio_double
12995 ELSE
12996 my_piovar%dkind=pio_real
12998 END IF
12999
13000 status=nf_fread3d(ng, idmod, ncname, piofile, &
13001 & vname(1,iduvel), my_piovar, &
13002 & inprec, iodesc, vsize, &
13003 & lbi, ubi, lbj, ubj, 1, n(ng), &
13004 & fscl, fmin, fmax, &
13005# ifdef MASKING
13006 & grid(ng) % umask, &
13007# endif
13008# ifdef CHECKSUM
13009 & ocean(ng) % b_u(:,:,:,tindex), &
13010 & checksum = fhash)
13011# else
13012 & ocean(ng) % b_u(:,:,:,tindex))
13013# endif
13014 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13015 IF (master) THEN
13016 WRITE (stdout,60) string, trim(vname(1,iduvel)), &
13017 & inprec, trim(ncname)
13018 END IF
13019 exit_flag=2
13020 ioerror=status
13021 RETURN
13022 ELSE
13023 IF (master) THEN
13024# ifdef CHECKSUM
13025 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax, &
13026 & fhash
13027# else
13028 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax
13029# endif
13030 END IF
13031 END IF
13032# ifdef DISTRIBUTE
13033 CALL mp_exchange3d (ng, myrank, idmod, 1, &
13034 & lbi, ubi, lbj, ubj, 1, n(ng), &
13035 & nghostpoints, &
13036 & ewperiodic(ng), nsperiodic(ng), &
13037 & ocean(ng) % b_u(:,:,:,tindex))
13038# endif
13039 ELSE
13040 IF (master) THEN
13041 WRITE (stdout,80) string, trim(vname(1,iduvel)), &
13042 & trim(ncname)
13043 END IF
13044 exit_flag=4
13045 IF (founderror(exit_flag, pio_noerr, &
13046 & __line__, myfile)) THEN
13047 RETURN
13048 END IF
13049
13050 END IF
13051 END IF
13052
13053
13054
13055 IF (get_var(idvvel).and.((model.eq.14).or.(model.eq.15))) THEN
13056 foundit=find_string(var_name, n_var, trim(vname(1,idvvel)), &
13057 & vindex)
13058 IF (foundit) THEN
13060 my_piovar%gtype=v3dvar
13061 IF (kind(ocean(ng)%b_v).eq.8) THEN
13062 my_piovar%dkind=pio_double
13064 ELSE
13065 my_piovar%dkind=pio_real
13067 END IF
13068
13069 status=nf_fread3d(ng, idmod, ncname, piofile, &
13070 & vname(1,idvvel), my_piovar, &
13071 & inprec, iodesc, vsize, &
13072 & lbi, ubi, lbj, ubj, 1, n(ng), &
13073 & fscl, fmin, fmax, &
13074# ifdef MASKING
13075 & grid(ng) % vmask, &
13076# endif
13077# ifdef CHECKSUM
13078 & ocean(ng) % b_v(:,:,:,tindex), &
13079 & checksum = fhash)
13080# else
13081 & ocean(ng) % b_v(:,:,:,tindex))
13082# endif
13083 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13084 IF (master) THEN
13085 WRITE (stdout,60) string, trim(vname(1,idvvel)), &
13086 & inprec, trim(ncname)
13087 END IF
13088 exit_flag=2
13089 ioerror=status
13090 RETURN
13091 ELSE
13092 IF (master) THEN
13093# ifdef CHECKSUM
13094 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax, &
13095 & fhash
13096# else
13097 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax
13098# endif
13099 END IF
13100 END IF
13101# ifdef DISTRIBUTE
13102 CALL mp_exchange3d (ng, myrank, idmod, 1, &
13103 & lbi, ubi, lbj, ubj, 1, n(ng), &
13104 & nghostpoints, &
13105 & ewperiodic(ng), nsperiodic(ng), &
13106 & ocean(ng) % b_v(:,:,:,tindex))
13107# endif
13108 ELSE
13109 IF (master) THEN
13110 WRITE (stdout,80) string, trim(vname(1,idvvel)), &
13111 & trim(ncname)
13112 END IF
13113 exit_flag=4
13114 IF (founderror(exit_flag, pio_noerr, &
13115 & __line__, myfile)) THEN
13116 RETURN
13117 END IF
13118
13119 END IF
13120 END IF
13121
13122
13123
13124 DO itrc=1,nt(ng)
13125 IF (get_var(idtvar(itrc)).and. &
13126 & ((model.eq.14).or.(model.eq.15))) THEN
13127 foundit=find_string(var_name, n_var, &
13128 & trim(vname(1,idtvar(itrc))), vindex)
13129 IF (foundit) THEN
13131 my_piovar%gtype=r3dvar
13132 IF (kind(ocean(ng)%b_t).eq.8) THEN
13133 my_piovar%dkind=pio_double
13135 ELSE
13136 my_piovar%dkind=pio_real
13138 END IF
13139
13140 status=nf_fread3d(ng, idmod, ncname, piofile, &
13141 & vname(1,idtvar(itrc)), my_piovar, &
13142 & inprec, iodesc, vsize, &
13143 & lbi, ubi, lbj, ubj, 1, n(ng), &
13144 & fscl, fmin, fmax, &
13145# ifdef MASKING
13146 & grid(ng) % rmask, &
13147# endif
13148# ifdef CHECKSUM
13149 & ocean(ng) % b_t(:,:,:,tindex,itrc), &
13150 & checksum = fhash)
13151# else
13152 & ocean(ng) % b_t(:,:,:,tindex,itrc))
13153# endif
13154 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13155 IF (master) THEN
13156 WRITE (stdout,60) string, trim(vname(1,idtvar(itrc))),&
13157 & inprec, trim(ncname)
13158 END IF
13159 exit_flag=2
13160 ioerror=status
13161 RETURN
13162 ELSE
13163 IF (master) THEN
13164# ifdef CHECKSUM
13165 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
13166 & fmin, fmax, fhash
13167# else
13168 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
13169 & fmin, fmax
13170# endif
13171 END IF
13172 END IF
13173# ifdef DISTRIBUTE
13174 CALL mp_exchange3d (ng, myrank, idmod, 1, &
13175 & lbi, ubi, lbj, ubj, 1, n(ng), &
13176 & nghostpoints, &
13177 & ewperiodic(ng), nsperiodic(ng), &
13178 & ocean(ng) % b_t(:,:,:,tindex,itrc))
13179# endif
13180 ELSE
13181 IF (master) THEN
13182 WRITE (stdout,80) string, trim(vname(1,idtvar(itrc))), &
13183 & trim(ncname)
13184 END IF
13185 exit_flag=4
13186 IF (founderror(exit_flag, pio_noerr, &
13187 & __line__, myfile)) THEN
13188 RETURN
13189 END IF
13190 END IF
13191 END IF
13192 END DO
13193# endif
13194# ifdef ADJUST_BOUNDARY
13195
13196
13197
13198 IF (get_var(idsbry(isfsur)).and.(model.eq.16).and. &
13199 & any(lobc(:,isfsur,ng))) THEN
13201 & vname(1,idsbry(isfsur)), &
13202 & boundary(ng) % b_zeta_obc(lbij:,:), &
13203 & piofile = piofile, &
13204 & start = (/1,1,inprec/), &
13205 & total = (/iorj,4,1/), &
13206 & min_val = fmin, &
13207 & max_val = fmax)
13208 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
13209 IF (master) THEN
13210 WRITE (stdout,75) trim(vname(1,idsbry(isfsur))), &
13211 & fmin, fmax
13212 END IF
13213 END IF
13214
13215
13216
13217 IF (get_var(idsbry(isubar)).and.(model.eq.16).and. &
13218 & any(lobc(:,isubar,ng))) THEN
13220 & vname(1,idsbry(isubar)), &
13221 & boundary(ng) % b_ubar_obc(lbij:,:), &
13222 & piofile = piofile, &
13223 & start = (/1,1,inprec/), &
13224 & total = (/iorj,4,1/), &
13225 & min_val = fmin, &
13226 & max_val = fmax)
13227 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
13228 IF (master) THEN
13229 WRITE (stdout,75) trim(vname(1,idsbry(isubar))), &
13230 & fmin, fmax
13231 END IF
13232 END IF
13233
13234
13235
13236 IF (get_var(idsbry(isvbar)).and.(model.eq.16).and. &
13237 & any(lobc(:,isvbar,ng))) THEN
13239 & vname(1,idsbry(isvbar)), &
13240 & boundary(ng) % b_vbar_obc(lbij:,:), &
13241 & piofile = piofile, &
13242 & start = (/1,1,inprec/), &
13243 & total = (/iorj,4,1/), &
13244 & min_val = fmin, &
13245 & max_val = fmax)
13246 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
13247 IF (master) THEN
13248 WRITE (stdout,75) trim(vname(1,idsbry(isvbar))), &
13249 & fmin, fmax
13250 END IF
13251 END IF
13252
13253# ifdef SOLVE3D
13254
13255
13256
13257 IF (get_var(idsbry(isuvel)).and.(model.eq.16).and. &
13258 & any(lobc(:,isuvel,ng))) THEN
13260 & vname(1,idsbry(isuvel)), &
13261 & boundary(ng) % b_u_obc(lbij:,:,:), &
13262 & piofile = piofile, &
13263 & start = (/1,1,1,inprec/), &
13264 & total = (/iorj,n(ng),4,1/), &
13265 & min_val = fmin, &
13266 & max_val = fmax)
13267 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
13268 IF (master) THEN
13269 WRITE (stdout,75) trim(vname(1,idsbry(isuvel))), &
13270 & fmin, fmax
13271 END IF
13272 END IF
13273
13274
13275
13276 IF (get_var(idsbry(isvvel)).and.(model.eq.16).and. &
13277 & any(lobc(:,isvvel,ng))) THEN
13279 & vname(1,idsbry(isvvel)), &
13280 & boundary(ng) % b_v_obc(lbij:,:,:), &
13281 & piofile = piofile, &
13282 & start = (/1,1,1,inprec/), &
13283 & total = (/iorj,n(ng),4,1/), &
13284 & min_val = fmin, &
13285 & max_val = fmax)
13286 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
13287 IF (master) THEN
13288 WRITE (stdout,75) trim(vname(1,idsbry(isvvel))), &
13289 & fmin, fmax
13290 END IF
13291 END IF
13292
13293
13294
13295 DO itrc=1,nt(ng)
13296 IF (get_var(idsbry(istvar(itrc))).and.(model.eq.16).and. &
13297 & any(lobc(:,istvar(itrc),ng))) THEN
13299 & vname(1,idsbry(istvar(itrc))), &
13300 & boundary(ng) % b_t_obc(lbij:,:,:, &
13301 & itrc), &
13302 & piofile = piofile, &
13303 & start =(/1,1,1,inprec/), &
13304 & total =(/iorj,n(ng),4,1/), &
13305 & min_val = fmin, &
13306 & max_val = fmax)
13307 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
13308 IF (master) THEN
13309 WRITE (stdout,75) trim(vname(1,idsbry(istvar(itrc)))), &
13310 & fmin, fmax
13311 END IF
13312 END IF
13313 END DO
13314# endif
13315# endif
13316# ifdef ADJUST_WSTRESS
13317
13318
13319
13320 IF (get_var(idusms).and.(model.eq.17)) THEN
13321 foundit=find_string(var_name, n_var, trim(vname(1,idusms)), &
13322 & vindex)
13323 IF (foundit) THEN
13325 my_piovar%gtype=u2dvar
13326 IF (kind(forces(ng)%b_sustr).eq.8) THEN
13327 my_piovar%dkind=pio_double
13329 ELSE
13330 my_piovar%dkind=pio_real
13332 END IF
13333
13334 status=nf_fread2d(ng, idmod, ncname, piofile, &
13335 & vname(1,idusms), my_piovar, &
13336 & inprec, iodesc, vsize, &
13337 & lbi, ubi, lbj, ubj, &
13338 & fscl, fmin, fmax, &
13339# ifdef MASKING
13340 & grid(ng) % umask, &
13341# endif
13342# ifdef CHECKSUM
13343 & forces(ng) % b_sustr, &
13344 & checksum = fhash)
13345# else
13346 & forces(ng) % b_sustr)
13347# endif
13348 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13349 IF (master) THEN
13350 WRITE (stdout,60) string, trim(vname(1,idusms)), &
13351 & inprec, trim(ncname)
13352 END IF
13353 exit_flag=2
13354 ioerror=status
13355 RETURN
13356 ELSE
13357 IF (master) THEN
13358# ifdef CHECKSUM
13359 WRITE (stdout,70) trim(vname(2,idusms)), fmin, fmax, &
13360 & fhash
13361# else
13362 WRITE (stdout,70) trim(vname(2,idusms)), fmin, fmax
13363# endif
13364 END IF
13365 END IF
13366# ifdef DISTRIBUTE
13367 CALL mp_exchange2d (ng, myrank, idmod, 1, &
13368 & lbi, ubi, lbj, ubj, &
13369 & nghostpoints, &
13370 & ewperiodic(ng), nsperiodic(ng), &
13371 & forces(ng) % b_sustr)
13372# endif
13373 ELSE
13374 IF (master) THEN
13375 WRITE (stdout,80) string, trim(vname(1,idusms)), &
13376 & trim(ncname)
13377 END IF
13378 exit_flag=4
13379 IF (founderror(exit_flag, pio_noerr, &
13380 & __line__, myfile)) THEN
13381 RETURN
13382 END IF
13383 END IF
13384 END IF
13385
13386
13387
13388 IF (get_var(idvsms).and.(model.eq.17)) THEN
13389 foundit=find_string(var_name, n_var, trim(vname(1,idvsms)), &
13390 & vindex)
13391 IF (foundit) THEN
13393 my_piovar%gtype=v2dvar
13394 IF (kind(forces(ng)%b_svstr).eq.8) THEN
13395 my_piovar%dkind=pio_double
13397 ELSE
13398 my_piovar%dkind=pio_real
13400 END IF
13401
13402 status=nf_fread2d(ng, idmod, ncname, piofile, &
13403 & vname(1,idvsms), my_piovar, &
13404 & inprec, iodesc, vsize, &
13405 & lbi, ubi, lbj, ubj, &
13406 & fscl, fmin, fmax, &
13407# ifdef MASKING
13408 & grid(ng) % vmask, &
13409# endif
13410# ifdef CHECKSUM
13411 & forces(ng) % b_svstr, &
13412 & checksum = fhash)
13413# else
13414 & forces(ng) % b_svstr)
13415# endif
13416 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13417 IF (master) THEN
13418 WRITE (stdout,60) string, trim(vname(1,idvsms)), &
13419 & inprec, trim(ncname)
13420 END IF
13421 exit_flag=2
13422 ioerror=status
13423 RETURN
13424 ELSE
13425 IF (master) THEN
13426# ifdef CHECKSUM
13427 WRITE (stdout,70) trim(vname(2,idvsms)), fmin, fmax, &
13428 & fhash
13429# else
13430 WRITE (stdout,70) trim(vname(2,idvsms)), fmin, fmax
13431# endif
13432 END IF
13433 END IF
13434# ifdef DISTRIBUTE
13435 CALL mp_exchange2d (ng, myrank, idmod, 1, &
13436 & lbi, ubi, lbj, ubj, &
13437 & nghostpoints, &
13438 & ewperiodic(ng), nsperiodic(ng), &
13439 & forces(ng) % b_svstr)
13440# endif
13441 ELSE
13442 IF (master) THEN
13443 WRITE (stdout,80) string, trim(vname(1,idvsms)), &
13444 & trim(ncname)
13445 END IF
13446 exit_flag=4
13447 IF (founderror(exit_flag, pio_noerr, &
13448 & __line__, myfile)) THEN
13449 RETURN
13450 END IF
13451
13452 END IF
13453 END IF
13454# endif
13455# if defined ADJUST_STFLUX && defined SOLVE3D
13456
13457
13458
13459 DO itrc=1,nt(ng)
13460 IF (get_var(idtsur(itrc)).and.(model.eq.17).and. &
13461 & lstflux(itrc,ng)) THEN
13462 foundit=find_string(var_name, n_var, &
13463 & trim(vname(1,idtsur(itrc))), vindex)
13464 IF (foundit) THEN
13466 my_piovar%gtype=r2dvar
13467 IF (kind(forces(ng)%b_stflx).eq.8) THEN
13468 my_piovar%dkind=pio_double
13470 ELSE
13471 my_piovar%dkind=pio_real
13473 END IF
13474
13475 status=nf_fread2d(ng, idmod, ncname, piofile, &
13476 & vname(1,idtsur(itrc)), my_piovar, &
13477 & inprec, iodesc, vsize, &
13478 & lbi, ubi, lbj, ubj, &
13479 & fscl, fmin, fmax, &
13480# ifdef MASKING
13481 & grid(ng) % rmask, &
13482# endif
13483# ifdef CHECKSUM
13484 & forces(ng) % b_stflx(:,:,itrc), &
13485 & checksum = fhash)
13486# else
13487 & forces(ng) % b_stflx(:,:,itrc))
13488# endif
13489 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13490 IF (master) THEN
13491 WRITE (stdout,60) string, trim(vname(1,idtsur(itrc))),&
13492 & inprec, trim(ncname)
13493 END IF
13494 exit_flag=2
13495 ioerror=status
13496 RETURN
13497 ELSE
13498 IF (master) THEN
13499# ifdef CHECKSUM
13500 WRITE (stdout,70) trim(vname(2,idtsur(itrc))), &
13501 & fmin, fmax, fhash
13502# else
13503 WRITE (stdout,70) trim(vname(2,idtsur(itrc))), &
13504 & fmin, fmax
13505# endif
13506 END IF
13507 END IF
13508# ifdef DISTRIBUTE
13509 CALL mp_exchange2d (ng, myrank, idmod, 1, &
13510 & lbi, ubi, lbj, ubj, &
13511 & nghostpoints, &
13512 & ewperiodic(ng), nsperiodic(ng), &
13513 & forces(ng) % b_stflx(:,:,itrc))
13514# endif
13515 ELSE
13516 IF (master) THEN
13517 WRITE (stdout,80) string, trim(vname(1,idtsur(itrc))), &
13518 & trim(ncname)
13519 END IF
13520 exit_flag=4
13521 IF (founderror(exit_flag, pio_noerr, &
13522 & __line__, myfile)) THEN
13523 RETURN
13524 END IF
13525 END IF
13526 END IF
13527 END DO
13528# endif
13529 END IF nrm_state
13530# endif
13531
13532# if defined FOUR_DVAR || (defined HESSIAN_SV && defined BNORM)
13533
13534
13535
13536
13537
13538 std_state: IF ((model.eq.10).or. &
13539 & (model.eq.11).or. &
13540 & (model.eq.12).or. &
13541 & (model.eq.13)) THEN
13542
13543
13544
13545 IF (get_var(idfsur).and.((model.eq.10).or.(model.eq.11))) THEN
13546 foundit=find_string(var_name, n_var, trim(vname(1,idfsur)), &
13547 & vindex)
13548 IF (foundit) THEN
13550 my_piovar%gtype=r2dvar
13551 IF (kind(ocean(ng)%e_zeta).eq.8) THEN
13552 my_piovar%dkind=pio_double
13554 ELSE
13555 my_piovar%dkind=pio_real
13557 END IF
13558
13559 status=nf_fread2d(ng, idmod, ncname, piofile, &
13560 & vname(1,idfsur), my_piovar, &
13561 & inprec, iodesc, vsize, &
13562 & lbi, ubi, lbj, ubj, &
13563 & fscl, fmin, fmax, &
13564# ifdef MASKING
13565 & grid(ng) % rmask, &
13566# endif
13567# ifdef CHECKSUM
13568 & ocean(ng) % e_zeta(:,:,tindex), &
13569 & checksum = fhash)
13570# else
13571 & ocean(ng) % e_zeta(:,:,tindex))
13572# endif
13573 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13574 IF (master) THEN
13575 WRITE (stdout,60) string, trim(vname(1,idfsur)), &
13576 & inprec, trim(ncname)
13577 END IF
13578 exit_flag=2
13579 ioerror=status
13580 RETURN
13581 ELSE
13582 IF (master) THEN
13583# ifdef CHECKSUM
13584 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax, &
13585 & fhash
13586# else
13587 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax
13588# endif
13589 END IF
13590 END IF
13591# ifdef DISTRIBUTE
13592 CALL mp_exchange2d (ng, myrank, idmod, 1, &
13593 & lbi, ubi, lbj, ubj, &
13594 & nghostpoints, &
13595 & ewperiodic(ng), nsperiodic(ng), &
13596 & ocean(ng) % e_zeta(:,:,tindex))
13597# endif
13598 ELSE
13599 IF (master) THEN
13600 WRITE (stdout,80) string, trim(vname(1,idfsur)), &
13601 & trim(ncname)
13602 END IF
13603 exit_flag=4
13604 IF (founderror(exit_flag, pio_noerr, &
13605 & __line__, myfile)) THEN
13606 RETURN
13607 END IF
13608
13609 END IF
13610 END IF
13611
13612
13613
13614 IF (get_var(idubar).and.((model.eq.10).or.(model.eq.11))) THEN
13615 foundit=find_string(var_name, n_var, trim(vname(1,idubar)), &
13616 & vindex)
13617 IF (foundit) THEN
13619 my_piovar%gtype=u2dvar
13620 IF (kind(ocean(ng)%e_ubar).eq.8) THEN
13621 my_piovar%dkind=pio_double
13623 ELSE
13624 my_piovar%dkind=pio_real
13626 END IF
13627
13628 status=nf_fread2d(ng, idmod, ncname, piofile, &
13629 & vname(1,idubar), my_piovar, &
13630 & inprec, iodesc, vsize, &
13631 & lbi, ubi, lbj, ubj, &
13632 & fscl, fmin, fmax, &
13633# ifdef MASKING
13634 & grid(ng) % umask, &
13635# endif
13636# ifdef CHECKSUM
13637 & ocean(ng) % e_ubar(:,:,tindex), &
13638 & checksum = fhash)
13639# else
13640 & ocean(ng) % e_ubar(:,:,tindex))
13641# endif
13642 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13643 IF (master) THEN
13644 WRITE (stdout,60) string, trim(vname(1,idubar)), &
13645 & inprec, trim(ncname)
13646 END IF
13647 exit_flag=2
13648 ioerror=status
13649 RETURN
13650 ELSE
13651 IF (master) THEN
13652# ifdef CHECKSUM
13653 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax, &
13654 & fhash
13655# else
13656 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax
13657# endif
13658 END IF
13659 END IF
13660# ifdef DISTRIBUTE
13661 CALL mp_exchange2d (ng, myrank, idmod, 1, &
13662 & lbi, ubi, lbj, ubj, &
13663 & nghostpoints, &
13664 & ewperiodic(ng), nsperiodic(ng), &
13665 & ocean(ng) % e_ubar(:,:,tindex))
13666# endif
13667 ELSE
13668 IF (master) THEN
13669 WRITE (stdout,80) string, trim(vname(1,idubar)), &
13670 & trim(ncname)
13671 END IF
13672 exit_flag=4
13673 IF (founderror(exit_flag, pio_noerr, &
13674 & __line__, myfile)) THEN
13675 RETURN
13676 END IF
13677 END IF
13678 END IF
13679
13680
13681
13682 IF (get_var(idvbar).and.((model.eq.10).or.(model.eq.11))) THEN
13683 foundit=find_string(var_name, n_var, trim(vname(1,idvbar)), &
13684 & vindex)
13685 IF (foundit) THEN
13687 my_piovar%gtype=v2dvar
13688 IF (kind(ocean(ng)%e_vbar).eq.8) THEN
13689 my_piovar%dkind=pio_double
13691 ELSE
13692 my_piovar%dkind=pio_real
13694 END IF
13695
13696 status=nf_fread2d(ng, idmod, ncname, piofile, &
13697 & vname(1,idvbar), my_piovar, &
13698 & inprec, iodesc, vsize, &
13699 & lbi, ubi, lbj, ubj, &
13700 & fscl, fmin, fmax, &
13701# ifdef MASKING
13702 & grid(ng) % vmask, &
13703# endif
13704# ifdef CHECKSUM
13705 & ocean(ng) % e_vbar(:,:,tindex), &
13706 & checksum = fhash)
13707# else
13708 & ocean(ng) % e_vbar(:,:,tindex))
13709# endif
13710 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13711 IF (master) THEN
13712 WRITE (stdout,60) string, trim(vname(1,idvbar)), &
13713 & inprec, trim(ncname)
13714 END IF
13715 exit_flag=2
13716 ioerror=status
13717 RETURN
13718 ELSE
13719 IF (master) THEN
13720# ifdef CHECKSUM
13721 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax, &
13722 & fhash
13723# else
13724 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax
13725# endif
13726
13727 END IF
13728 END IF
13729# ifdef DISTRIBUTE
13730 CALL mp_exchange2d (ng, myrank, idmod, 1, &
13731 & lbi, ubi, lbj, ubj, &
13732 & nghostpoints, &
13733 & ewperiodic(ng), nsperiodic(ng), &
13734 & ocean(ng) % e_vbar(:,:,tindex))
13735# endif
13736 ELSE
13737 IF (master) THEN
13738 WRITE (stdout,80) string, trim(vname(1,idvbar)), &
13739 & trim(ncname)
13740 END IF
13741 exit_flag=4
13742 IF (founderror(exit_flag, pio_noerr, &
13743 & __line__, myfile)) THEN
13744 RETURN
13745 END IF
13746
13747 END IF
13748 END IF
13749
13750# ifdef SOLVE3D
13751
13752
13753
13754 IF (get_var(iduvel).and.((model.eq.10).or.(model.eq.11))) THEN
13755 foundit=find_string(var_name, n_var, trim(vname(1,iduvel)), &
13756 & vindex)
13757 IF (foundit) THEN
13759 my_piovar%gtype=u3dvar
13760 IF (kind(ocean(ng)%b_u).eq.8) THEN
13761 my_piovar%dkind=pio_double
13763 ELSE
13764 my_piovar%dkind=pio_real
13766 END IF
13767
13768 status=nf_fread3d(ng, idmod, ncname, piofile, &
13769 & vname(1,iduvel), my_piovar, &
13770 & inprec, iodesc, vsize, &
13771 & lbi, ubi, lbj, ubj, 1, n(ng), &
13772 & fscl, fmin, fmax, &
13773# ifdef MASKING
13774 & grid(ng) % umask, &
13775# endif
13776# ifdef CHECKSUM
13777 & ocean(ng) % e_u(:,:,:,tindex), &
13778 & checksum = fhash)
13779# else
13780 & ocean(ng) % e_u(:,:,:,tindex))
13781# endif
13782 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13783 IF (master) THEN
13784 WRITE (stdout,60) string, trim(vname(1,iduvel)), &
13785 & inprec, trim(ncname)
13786 END IF
13787 exit_flag=2
13788 ioerror=status
13789 RETURN
13790 ELSE
13791 IF (master) THEN
13792# ifdef CHECKSUM
13793 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax, &
13794 & fhash
13795# else
13796 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax
13797# endif
13798 END IF
13799 END IF
13800# ifdef DISTRIBUTE
13801 CALL mp_exchange3d (ng, myrank, idmod, 1, &
13802 & lbi, ubi, lbj, ubj, 1, n(ng), &
13803 & nghostpoints, &
13804 & ewperiodic(ng), nsperiodic(ng), &
13805 & ocean(ng) % e_u(:,:,:,tindex))
13806# endif
13807 ELSE
13808 IF (master) THEN
13809 WRITE (stdout,80) string, trim(vname(1,iduvel)), &
13810 & trim(ncname)
13811 END IF
13812 exit_flag=4
13813 IF (founderror(exit_flag, pio_noerr, &
13814 & __line__, myfile)) THEN
13815 RETURN
13816 END IF
13817 END IF
13818 END IF
13819
13820
13821
13822 IF (get_var(idvvel).and.((model.eq.10).or.(model.eq.11))) THEN
13823 foundit=find_string(var_name, n_var, trim(vname(1,idvvel)), &
13824 & vindex)
13825 IF (foundit) THEN
13827 my_piovar%gtype=v3dvar
13828 IF (kind(ocean(ng)%e_v).eq.8) THEN
13829 my_piovar%dkind=pio_double
13831 ELSE
13832 my_piovar%dkind=pio_real
13834 END IF
13835
13836 status=nf_fread3d(ng, idmod, ncname, piofile, &
13837 & vname(1,idvvel), my_piovar, &
13838 & inprec, iodesc, vsize, &
13839 & lbi, ubi, lbj, ubj, 1, n(ng), &
13840 & fscl, fmin, fmax, &
13841# ifdef MASKING
13842 & grid(ng) % vmask, &
13843# endif
13844# ifdef CHECKSUM
13845 & ocean(ng) % e_v(:,:,:,tindex), &
13846 & checksum = fhash)
13847# else
13848 & ocean(ng) % e_v(:,:,:,tindex))
13849# endif
13850 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13851 IF (master) THEN
13852 WRITE (stdout,60) string, trim(vname(1,idvvel)), &
13853 & inprec, trim(ncname)
13854 END IF
13855 exit_flag=2
13856 ioerror=status
13857 RETURN
13858 ELSE
13859 IF (master) THEN
13860# ifdef CHECKSUM
13861 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax, &
13862 & fhash
13863# else
13864 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax
13865# endif
13866 END IF
13867 END IF
13868# ifdef DISTRIBUTE
13869 CALL mp_exchange3d (ng, myrank, idmod, 1, &
13870 & lbi, ubi, lbj, ubj, 1, n(ng), &
13871 & nghostpoints, &
13872 & ewperiodic(ng), nsperiodic(ng), &
13873 & ocean(ng) % e_v(:,:,:,tindex))
13874# endif
13875 ELSE
13876 IF (master) THEN
13877 WRITE (stdout,80) string, trim(vname(1,idvvel)), &
13878 & trim(ncname)
13879 END IF
13880 exit_flag=4
13881 IF (founderror(exit_flag, pio_noerr, &
13882 & __line__, myfile)) THEN
13883 RETURN
13884 END IF
13885
13886 END IF
13887 END IF
13888
13889
13890
13891 DO itrc=1,nt(ng)
13892 IF (get_var(idtvar(itrc)).and. &
13893 & ((model.eq.10).or.(model.eq.11))) THEN
13894 foundit=find_string(var_name, n_var, &
13895 & trim(vname(1,idtvar(itrc))), vindex)
13896 IF (foundit) THEN
13898 my_piovar%gtype=r3dvar
13899 IF (kind(ocean(ng)%e_t).eq.8) THEN
13900 my_piovar%dkind=pio_double
13902 ELSE
13903 my_piovar%dkind=pio_real
13905 END IF
13906
13907 status=nf_fread3d(ng, idmod, ncname, piofile, &
13908 & vname(1,idtvar(itrc)), my_piovar, &
13909 & inprec, iodesc, vsize, &
13910 & lbi, ubi, lbj, ubj, 1, n(ng), &
13911 & fscl, fmin, fmax, &
13912# ifdef MASKING
13913 & grid(ng) % rmask, &
13914# endif
13915# ifdef CHECKSUM
13916 & ocean(ng) % e_t(:,:,:,tindex,itrc), &
13917 & checksum = fhash)
13918# else
13919 & ocean(ng) % e_t(:,:,:,tindex,itrc))
13920# endif
13921 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13922 IF (master) THEN
13923 WRITE (stdout,60) string, trim(vname(1,idtvar(itrc))),&
13924 & inprec, trim(ncname)
13925 END IF
13926 exit_flag=2
13927 ioerror=status
13928 RETURN
13929 ELSE
13930 IF (master) THEN
13931# ifdef CHECKSUM
13932 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
13933 & fmin, fmax, fhash
13934# else
13935 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
13936 & fmin, fmax
13937# endif
13938 END IF
13939 END IF
13940# ifdef DISTRIBUTE
13941 CALL mp_exchange3d (ng, myrank, idmod, 1, &
13942 & lbi, ubi, lbj, ubj, 1, n(ng), &
13943 & nghostpoints, &
13944 & ewperiodic(ng), nsperiodic(ng), &
13945 & ocean(ng) % e_t(:,:,:,tindex,itrc))
13946# endif
13947 ELSE
13948 IF (master) THEN
13949 WRITE (stdout,80) string, trim(vname(1,idtvar(itrc))), &
13950 & trim(ncname)
13951 END IF
13952 exit_flag=4
13953 IF (founderror(exit_flag, pio_noerr, &
13954 & __line__, myfile)) THEN
13955 RETURN
13956 END IF
13957 END IF
13958 END IF
13959 END DO
13960# endif
13961
13962
13963
13964 IF (have_var(idkhor).and.((model.eq.10).or.(model.eq.11))) THEN
13965 foundit=find_string(var_name, n_var, trim(vname(1,idkhor)), &
13966 & vindex)
13967 IF (foundit) THEN
13969 my_piovar%gtype=r2dvar
13970 IF (kind(mixing(ng)%Kh).eq.8) THEN
13971 my_piovar%dkind=pio_double
13973 ELSE
13974 my_piovar%dkind=pio_real
13976 END IF
13977
13978 status=nf_fread2d(ng, idmod, ncname, piofile, &
13979 & vname(1,idkhor), my_piovar, &
13980 & inprec, iodesc, vsize, &
13981 & lbi, ubi, lbj, ubj, &
13982 & fscl, khmin(ng), khmax(ng), &
13983# ifdef MASKING
13984 & grid(ng) % rmask, &
13985# endif
13986# ifdef CHECKSUM
13987 & mixing(ng) % Kh, &
13988 & checksum = fhash)
13989# else
13990 & mixing(ng) % Kh)
13991# endif
13992 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
13993 IF (master) THEN
13994 WRITE (stdout,60) string, trim(vname(1,idkhor)), &
13995 & inprec, trim(ncname)
13996 END IF
13997 exit_flag=2
13998 ioerror=status
13999 RETURN
14000 ELSE
14001 IF (master) THEN
14002# ifdef CHECKSUM
14003 WRITE (stdout,70) trim(vname(2,idkhor)), &
14004 & khmin(ng), khmax(ng), fhash
14005# else
14006 WRITE (stdout,70) trim(vname(2,idkhor)), &
14007 & khmin(ng), khmax(ng)
14008# endif
14009 END IF
14010 END IF
14011# ifdef DISTRIBUTE
14012 CALL mp_exchange2d (ng, myrank, idmod, 1, &
14013 & lbi, ubi, lbj, ubj, &
14014 & nghostpoints, &
14015 & ewperiodic(ng), nsperiodic(ng), &
14016 & mixing(ng) % Kh)
14017# endif
14018 ELSE
14019 IF (master) THEN
14020 WRITE (stdout,80) string, trim(vname(1,idkhor)), &
14021 & trim(ncname)
14022 END IF
14023 exit_flag=4
14024 IF (founderror(exit_flag, pio_noerr, &
14025 & __line__, myfile)) THEN
14026 RETURN
14027 END IF
14028 END IF
14029 END IF
14030
14031# ifdef SOLVE3D
14032
14033
14034
14035 IF (have_var(idkver).and.((model.eq.10).or.(model.eq.11))) THEN
14036 foundit=find_string(var_name, n_var, trim(vname(1,idkver)), &
14037 & vindex)
14038 IF (foundit) THEN
14040 my_piovar%gtype=w3dvar
14041 IF (kind(mixing(ng)%Kv).eq.8) THEN
14042 my_piovar%dkind=pio_double
14044 ELSE
14045 my_piovar%dkind=pio_real
14047 END IF
14048
14049 status=nf_fread3d(ng, idmod, ncname, piofile, &
14050 & vname(1,idkver), my_piovar, &
14051 & inprec, iodesc, vsize, &
14052 & lbi, ubi, lbj, ubj, 0, n(ng), &
14053 & fscl, kvmin(ng), kvmax(ng), &
14054# ifdef MASKING
14055 & grid(ng) % rmask, &
14056# endif
14057# ifdef CHECKSUM
14058 & mixing(ng) % Kv, &
14059 & checksum = fhash)
14060# else
14061 & mixing(ng) % Kv)
14062# endif
14063 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14064 IF (master) THEN
14065 WRITE (stdout,60) string, trim(vname(1,idkver)), &
14066 & inprec, trim(ncname)
14067 END IF
14068 exit_flag=2
14069 ioerror=status
14070 RETURN
14071 ELSE
14072 IF (master) THEN
14073# ifdef CHECKSUM
14074 WRITE (stdout,70) trim(vname(2,idkver)), &
14075 & kvmin(ng), kvmax, fhash
14076# else
14077 WRITE (stdout,70) trim(vname(2,idkver)), &
14078 & kvmin(ng), kvmax, fhash
14079# endif
14080 END IF
14081 END IF
14082# ifdef DISTRIBUTE
14083 CALL mp_exchange3d (ng, myrank, idmod, 1, &
14084 & lbi, ubi, lbj, ubj, 0, n(ng), &
14085 & nghostpoints, &
14086 & ewperiodic(ng), nsperiodic(ng), &
14087 & mixing(ng) % Kv)
14088# endif
14089 ELSE
14090 IF (master) THEN
14091 WRITE (stdout,80) string, trim(vname(1,idkver)), &
14092 & trim(ncname)
14093 END IF
14094 exit_flag=4
14095 IF (founderror(exit_flag, pio_noerr, &
14096 & __line__, myfile)) THEN
14097 RETURN
14098 END IF
14099 END IF
14100 END IF
14101# endif
14102# ifdef ADJUST_BOUNDARY
14103
14104
14105
14106 IF (get_var(idsbry(isfsur)).and.(model.eq.12).and. &
14107 & any(lobc(:,isfsur,ng))) THEN
14109 & vname(1,idsbry(isfsur)), &
14110 & boundary(ng) % e_zeta_obc(lbij:,:), &
14111 & piofile = piofile, &
14112 & start = (/1,1,inprec/), &
14113 & total = (/iorj,4,1/), &
14114 & min_val = fmin, &
14115 & max_val = fmax)
14116 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
14117 IF (master) THEN
14118 WRITE (stdout,75) trim(vname(1,idsbry(isfsur))), &
14119 & fmin, fmax
14120 END IF
14121 END IF
14122
14123
14124
14125 IF (get_var(idsbry(isubar)).and.(model.eq.12).and. &
14126 & any(lobc(:,isubar,ng))) THEN
14128 & vname(1,idsbry(isubar)), &
14129 & boundary(ng) % e_ubar_obc(lbij:,:), &
14130 & piofile = piofile, &
14131 & start = (/1,1,inprec/), &
14132 & total = (/iorj,4,1/), &
14133 & min_val = fmin, &
14134 & max_val = fmax)
14135 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
14136 IF (master) THEN
14137 WRITE (stdout,75) trim(vname(1,idsbry(isubar))), &
14138 & fmin, fmax
14139 END IF
14140 END IF
14141
14142
14143
14144 IF (get_var(idsbry(isvbar)).and.(model.eq.12).and. &
14145 & any(lobc(:,isvbar,ng))) THEN
14147 & vname(1,idsbry(isvbar)), &
14148 & boundary(ng) % e_vbar_obc(lbij:,:), &
14149 & piofile = piofile, &
14150 & start = (/1,1,inprec/), &
14151 & total = (/iorj,4,1/), &
14152 & min_val = fmin, &
14153 & max_val = fmax)
14154 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
14155 IF (master) THEN
14156 WRITE (stdout,75) trim(vname(1,idsbry(isvbar))), &
14157 & fmin, fmax
14158 END IF
14159 END IF
14160
14161# ifdef SOLVE3D
14162
14163
14164
14165 IF (get_var(idsbry(isuvel)).and.(model.eq.12).and. &
14166 & any(lobc(:,isuvel,ng))) THEN
14168 & vname(1,idsbry(isuvel)), &
14169 & boundary(ng) % e_u_obc(lbij:,:,:), &
14170 & piofile = piofile, &
14171 & start = (/1,1,1,inprec/), &
14172 & total = (/iorj,n(ng),4,1/), &
14173 & min_val = fmin, &
14174 & max_val = fmax)
14175 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
14176 IF (master) THEN
14177 WRITE (stdout,75) trim(vname(1,idsbry(isuvel))), &
14178 & fmin, fmax
14179 END IF
14180 END IF
14181
14182
14183
14184 IF (get_var(idsbry(isvvel)).and.(model.eq.12).and. &
14185 & any(lobc(:,isvvel,ng))) THEN
14187 & vname(1,idsbry(isvvel)), &
14188 & boundary(ng) % e_v_obc(lbij:,:,:), &
14189 & piofile = piofile, &
14190 & start = (/1,1,1,inprec/), &
14191 & total = (/iorj,n(ng),4,1/), &
14192 & min_val = fmin, &
14193 & max_val = fmax)
14194 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
14195 IF (master) THEN
14196 WRITE (stdout,75) trim(vname(1,idsbry(isvvel))), &
14197 & fmin, fmax
14198 END IF
14199 END IF
14200
14201
14202
14203 DO itrc=1,nt(ng)
14204 IF (get_var(idsbry(istvar(itrc))).and.(model.eq.12).and. &
14205 & any(lobc(:,istvar(itrc),ng))) THEN
14207 & vname(1,idsbry(istvar(itrc))), &
14208 & boundary(ng) % e_t_obc(lbij:,:,:, &
14209 & itrc), &
14210 & piofile = piofile, &
14211 & start =(/1,1,1,inprec/), &
14212 & total =(/iorj,n(ng),4,1/), &
14213 & min_val = fmin, &
14214 & max_val = fmax)
14215 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
14216 IF (master) THEN
14217 WRITE (stdout,75) trim(vname(1,idsbry(istvar(itrc)))), &
14218 & fmin, fmax
14219 END IF
14220 END IF
14221 END DO
14222# endif
14223# endif
14224# ifdef ADJUST_WSTRESS
14225
14226
14227
14228 IF (get_var(idusms).and.(model.eq.13)) THEN
14229 foundit=find_string(var_name, n_var, trim(vname(1,idusms)), &
14230 & vindex)
14231 IF (foundit) THEN
14232 scale=1.0_dp/rho0
14234 my_piovar%gtype=u2dvar
14235 IF (kind(forces(ng)%e_sustr).eq.8) THEN
14236 my_piovar%dkind=pio_double
14238 ELSE
14239 my_piovar%dkind=pio_real
14241 END IF
14242
14243 status=nf_fread2d(ng, idmod, ncname, piofile, &
14244 & vname(1,idusms), my_piovar, &
14245 & inprec, iodesc, vsize, &
14246 & lbi, ubi, lbj, ubj, &
14247 & scale, fmin, fmax, &
14248# ifdef MASKING
14249 & grid(ng) % umask, &
14250# endif
14251# ifdef CHECKSUM
14252 & forces(ng) % e_sustr, &
14253 & checksum = fhash)
14254# else
14255 & forces(ng) % e_sustr)
14256# endif
14257 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14258 IF (master) THEN
14259 WRITE (stdout,60) string, trim(vname(1,idusms)), &
14260 & inprec, trim(ncname)
14261 END IF
14262 exit_flag=2
14263 ioerror=status
14264 RETURN
14265 ELSE
14266 IF (master) THEN
14267# ifdef CHECKSUM
14268 WRITE (stdout,70) trim(vname(2,idusms)), fmin, fmax, &
14269 & fhash
14270# else
14271 WRITE (stdout,70) trim(vname(2,idusms)), fmin, fmax
14272# endif
14273 END IF
14274 END IF
14275# ifdef DISTRIBUTE
14276 CALL mp_exchange2d (ng, myrank, idmod, 1, &
14277 & lbi, ubi, lbj, ubj, &
14278 & nghostpoints, &
14279 & ewperiodic(ng), nsperiodic(ng), &
14280 & forces(ng) % e_sustr)
14281# endif
14282 ELSE
14283 IF (master) THEN
14284 WRITE (stdout,80) string, trim(vname(1,idusms)), &
14285 & trim(ncname)
14286 END IF
14287 exit_flag=4
14288 IF (founderror(exit_flag, pio_noerr, &
14289 & __line__, myfile)) THEN
14290 RETURN
14291 END IF
14292 END IF
14293 END IF
14294
14295
14296
14297 IF (get_var(idvsms).and.(model.eq.13)) THEN
14298 foundit=find_string(var_name, n_var, trim(vname(1,idvsms)), &
14299 & vindex)
14300 IF (foundit) THEN
14301 scale=1.0_dp/rho0
14303 my_piovar%gtype=v2dvar
14304 IF (kind(forces(ng)%e_svstr).eq.8) THEN
14305 my_piovar%dkind=pio_double
14307 ELSE
14308 my_piovar%dkind=pio_real
14310 END IF
14311
14312 status=nf_fread2d(ng, idmod, ncname, piofile, &
14313 & vname(1,idvsms), my_piovar, &
14314 & inprec, iodesc, vsize, &
14315 & lbi, ubi, lbj, ubj, &
14316 & scale, fmin, fmax, &
14317# ifdef MASKING
14318 & grid(ng) % vmask, &
14319# endif
14320# ifdef CHECKSUM
14321 & forces(ng) % e_svstr, &
14322 & checksum = fhash)
14323# else
14324 & forces(ng) % e_svstr)
14325# endif
14326 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14327 IF (master) THEN
14328 WRITE (stdout,60) string, trim(vname(1,idvsms)), &
14329 & inprec, trim(ncname)
14330 END IF
14331 exit_flag=2
14332 ioerror=status
14333 RETURN
14334 ELSE
14335 IF (master) THEN
14336# ifdef CHECKSUM
14337 WRITE (stdout,70) trim(vname(2,idvsms)), fmin, fmax, &
14338 & fhash
14339# else
14340 WRITE (stdout,70) trim(vname(2,idvsms)), fmin, fmax
14341# endif
14342 END IF
14343 END IF
14344# ifdef DISTRIBUTE
14345 CALL mp_exchange2d (ng, myrank, idmod, 1, &
14346 & lbi, ubi, lbj, ubj, &
14347 & nghostpoints, &
14348 & ewperiodic(ng), nsperiodic(ng), &
14349 & forces(ng) % e_svstr)
14350# endif
14351 ELSE
14352 IF (master) THEN
14353 WRITE (stdout,80) string, trim(vname(1,idvsms)), &
14354 & trim(ncname)
14355 END IF
14356 exit_flag=4
14357 IF (founderror(exit_flag, pio_noerr, &
14358 & __line__, myfile)) THEN
14359 RETURN
14360 END IF
14361 END IF
14362 END IF
14363# endif
14364# if defined ADJUST_STFLUX && defined SOLVE3D
14365
14366
14367
14368 DO itrc=1,nt(ng)
14369 IF (get_var(idtsur(itrc)).and.(model.eq.13).and. &
14370 & lstflux(itrc,ng)) THEN
14371 foundit=find_string(var_name, n_var, &
14372 & trim(vname(1,idtsur(itrc))), vindex)
14373 IF (foundit) THEN
14374 IF (itrc.eq.itemp) THEN
14375 scale=1.0_dp/(rho0*cp)
14376 ELSE
14377 scale=1.0_dp
14378 END IF
14380 my_piovar%gtype=r2dvar
14381 IF (kind(forces(ng)%e_stflx).eq.8) THEN
14382 my_piovar%dkind=pio_double
14384 ELSE
14385 my_piovar%dkind=pio_real
14387 END IF
14388
14389 status=nf_fread2d(ng, idmod, ncname, piofile, &
14390 & vname(1,idtsur(itrc)), my_piovar, &
14391 & inprec, iodesc, vsize, &
14392 & lbi, ubi, lbj, ubj, &
14393 & scale, fmin, fmax, &
14394# ifdef MASKING
14395 & grid(ng) % rmask, &
14396# endif
14397# ifdef CHECKSUM
14398 & forces(ng) % e_stflx(:,:,itrc), &
14399 & checksum = fhash)
14400# else
14401 & forces(ng) % e_stflx(:,:,itrc))
14402# endif
14403 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14404 IF (master) THEN
14405 WRITE (stdout,60) string, trim(vname(1,idtsur(itrc))),&
14406 & inprec, trim(ncname)
14407 END IF
14408 exit_flag=2
14409 ioerror=status
14410 RETURN
14411 ELSE
14412 IF (master) THEN
14413# ifdef CHECKSUM
14414 WRITE (stdout,70) trim(vname(2,idtsur(itrc))), &
14415 & fmin, fmax, fhash
14416# else
14417 WRITE (stdout,70) trim(vname(2,idtsur(itrc))), &
14418 & fmin, fmax
14419# endif
14420 END IF
14421 END IF
14422# ifdef DISTRIBUTE
14423 CALL mp_exchange2d (ng, myrank, idmod, 1, &
14424 & lbi, ubi, lbj, ubj, &
14425 & nghostpoints, &
14426 & ewperiodic(ng), nsperiodic(ng), &
14427 & forces(ng) % e_stflx(:,:,itrc))
14428# endif
14429 ELSE
14430 IF (master) THEN
14431 WRITE (stdout,80) string, trim(vname(1,idtsur(itrc))), &
14432 & trim(ncname)
14433 END IF
14434 exit_flag=4
14435 IF (founderror(exit_flag, pio_noerr, &
14436 & __line__, myfile)) THEN
14437 RETURN
14438 END IF
14439 END IF
14440 END IF
14441 END DO
14442# endif
14443 END IF std_state
14444# endif
14445
14446# if defined IMPULSE
14447
14448
14449
14450
14451
14452 frc_state: IF (model.eq.7) THEN
14453
14454
14455
14456 nrecfrc(ng)=nrec
14457
14458
14459
14461 & rclock%DateNumber, frctime(ng:), &
14462 & piofile = piofile, &
14463 & start = (/inprec/), &
14464 & total = (/1/))
14465 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
14466
14467
14468
14469 IF (get_var(idfsur)) THEN
14470 foundit=find_string(var_name, n_var, trim(vname(1,idfsur)), &
14471 & vindex)
14472 IF (foundit) THEN
14474 my_piovar%gtype=r2dvar
14475 IF (kind(ocean(ng)%f_zeta).eq.8) THEN
14476 my_piovar%dkind=pio_double
14478 ELSE
14479 my_piovar%dkind=pio_real
14481 END IF
14482
14483 status=nf_fread2d(ng, idmod, ncname, piofile, &
14484 & vname(1,idfsur), my_piovar, &
14485 & inprec, iodesc, vsize, &
14486 & lbi, ubi, lbj, ubj, &
14487 & fscl, fmin, fmax, &
14488# ifdef MASKING
14489 & grid(ng) % rmask, &
14490# endif
14491# ifdef CHECKSUM
14492 & ocean(ng) % f_zeta, &
14493 & checksum = fhash)
14494# else
14495 & ocean(ng) % f_zeta)
14496# endif
14497 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14498 IF (master) THEN
14499 WRITE (stdout,60) string, trim(vname(1,idfsur)), &
14500 & inprec, trim(ncname)
14501 END IF
14502 exit_flag=2
14503 ioerror=status
14504 RETURN
14505 ELSE
14506 IF (master) THEN
14507# ifdef CHECKSUM
14508 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax, &
14509 & fhash
14510# else
14511 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax
14512# endif
14513 END IF
14514 END IF
14515 ELSE
14516 IF (master) THEN
14517 WRITE (stdout,80) string, trim(vname(1,idfsur)), &
14518 & trim(ncname)
14519 END IF
14520 exit_flag=4
14521 IF (founderror(exit_flag, pio_noerr, &
14522 & __line__, myfile)) THEN
14523 RETURN
14524 END IF
14525 END IF
14526 END IF
14527
14528# ifndef SOLVE3D
14529
14530
14531
14532 IF (get_var(idubar)) THEN
14533 foundit=find_string(var_name, n_var, trim(vname(1,idubar)), &
14534 & vindex)
14535 IF (foundit) THEN
14537 my_piovar%gtype=u2dvar
14538 IF (kind(ocean(ng)%f_ubar).eq.8) THEN
14539 my_piovar%dkind=pio_double
14541 ELSE
14542 my_piovar%dkind=pio_real
14544 END IF
14545
14546 status=nf_fread2d(ng, idmod, ncname, piofile, &
14547 & vname(1,idubar), my_piovar, &
14548 & inprec, iodesc, vsize, &
14549 & lbi, ubi, lbj, ubj, &
14550 & fscl, fmin, fmax, &
14551# ifdef MASKING
14552 & grid(ng) % umask, &
14553# endif
14554# ifdef CHECKSUM
14555 & ocean(ng) % f_ubar, &
14556 & checksum = fhash)
14557# else
14558 & ocean(ng) % f_ubar)
14559# endif
14560 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14561 IF (master) THEN
14562 WRITE (stdout,60) string, trim(vname(1,idubar)), &
14563 & inprec, trim(ncname)
14564 END IF
14565 exit_flag=2
14566 ioerror=status
14567 RETURN
14568 ELSE
14569 IF (master) THEN
14570# ifdef CHECKSUM
14571 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax, &
14572 & fhash
14573# else
14574 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax
14575# endif
14576 END IF
14577 END IF
14578 ELSE
14579 IF (master) THEN
14580 WRITE (stdout,80) string, trim(vname(1,idubar)), &
14581 & trim(ncname)
14582 END IF
14583 exit_flag=4
14584 IF (founderror(exit_flag, pio_noerr, &
14585 & __line__, myfile)) THEN
14586 RETURN
14587 END IF
14588 END IF
14589 END IF
14590
14591
14592
14593 IF (get_var(idvbar)) THEN
14594 foundit=find_string(var_name, n_var, trim(vname(1,idvbar)), &
14595 & vindex)
14596 IF (foundit) THEN
14598 my_piovar%gtype=v2dvar
14599 IF (kind(ocean(ng)%f_vbar).eq.8) THEN
14600 my_piovar%dkind=pio_double
14602 ELSE
14603 my_piovar%dkind=pio_real
14605 END IF
14606
14607 status=nf_fread2d(ng, idmod, ncname, piofile, &
14608 & vname(1,idvbar), my_piovar, &
14609 & inprec, iodesc, vsize, &
14610 & lbi, ubi, lbj, ubj, &
14611 & fscl, fmin, fmax, &
14612# ifdef MASKING
14613 & grid(ng) % vmask, &
14614# endif
14615# ifdef CHECKSUM
14616 & ocean(ng) % f_vbar, &
14617 & checksum = fhash)
14618# else
14619 & ocean(ng) % f_vbar)
14620# endif
14621 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14622 IF (master) THEN
14623 WRITE (stdout,60) string, trim(vname(1,idvbar)), &
14624 & inprec, trim(ncname)
14625 END IF
14626 exit_flag=2
14627 ioerror=status
14628 RETURN
14629 ELSE
14630 IF (master) THEN
14631# ifdef CHECKSUM
14632 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax, &
14633 & fhash
14634# else
14635 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax
14636# endif
14637 END IF
14638 END IF
14639 ELSE
14640 IF (master) THEN
14641 WRITE (stdout,80) string, trim(vname(1,idvbar)), &
14642 & trim(ncname)
14643 END IF
14644 exit_flag=4
14645 IF (founderror(exit_flag, pio_noerr, &
14646 & __line__, myfile)) THEN
14647 RETURN
14648 END IF
14649 END IF
14650 END IF
14651# endif
14652# ifdef SOLVE3D
14653
14654
14655
14656 IF (get_var(iduvel)) THEN
14657 foundit=find_string(var_name, n_var, trim(vname(1,iduvel)), &
14658 & vindex)
14659 IF (foundit) THEN
14661 my_piovar%gtype=u3dvar
14662 IF (kind(ocean(ng)%f_u).eq.8) THEN
14663 my_piovar%dkind=pio_double
14665 ELSE
14666 my_piovar%dkind=pio_real
14668 END IF
14669
14670 status=nf_fread3d(ng, idmod, ncname, piofile, &
14671 & vname(1,iduvel), my_piovar, &
14672 & inprec, iodesc, vsize, &
14673 & lbi, ubi, lbj, ubj, 1, n(ng), &
14674 & fscl, fmin, fmax, &
14675# ifdef MASKING
14676 & grid(ng) % umask, &
14677# endif
14678# ifdef CHECKSUM
14679 & ocean(ng) % f_u, &
14680 & checksum = fhash)
14681# else
14682 & ocean(ng) % f_u)
14683# endif
14684 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14685 IF (master) THEN
14686 WRITE (stdout,60) string, trim(vname(1,iduvel)), &
14687 & inprec, trim(ncname)
14688 END IF
14689 exit_flag=2
14690 ioerror=status
14691 RETURN
14692 ELSE
14693 IF (master) THEN
14694# ifdef CHECKSUM
14695 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax, &
14696 & fhash
14697# else
14698 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax
14699# endif
14700 END IF
14701 END IF
14702 ELSE
14703 IF (master) THEN
14704 WRITE (stdout,80) string, trim(vname(1,iduvel)), &
14705 & trim(ncname)
14706 END IF
14707 exit_flag=4
14708 IF (founderror(exit_flag, pio_noerr, &
14709 & __line__, myfile)) THEN
14710 RETURN
14711 END IF
14712 END IF
14713 END IF
14714
14715
14716
14717 IF (get_var(idvvel)) THEN
14718 foundit=find_string(var_name, n_var, trim(vname(1,idvvel)), &
14719 & vindex)
14720 IF (foundit) THEN
14722 my_piovar%gtype=v3dvar
14723 IF (kind(ocean(ng)%f_v).eq.8) THEN
14724 my_piovar%dkind=pio_double
14726 ELSE
14727 my_piovar%dkind=pio_real
14729 END IF
14730
14731 status=nf_fread3d(ng, idmod, ncname, piofile, &
14732 & vname(1,idvvel), my_piovar, &
14733 & inprec, iodesc, vsize, &
14734 & lbi, ubi, lbj, ubj, 1, n(ng), &
14735 & fscl, fmin, fmax, &
14736# ifdef MASKING
14737 & grid(ng) % vmask, &
14738# endif
14739# ifdef CHECKSUM
14740 & ocean(ng) % f_v, &
14741 & checksum = fhash)
14742# else
14743 & ocean(ng) % f_v)
14744# endif
14745 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14746 IF (master) THEN
14747 WRITE (stdout,60) string, trim(vname(1,idvvel)), &
14748 & inprec, trim(ncname)
14749 END IF
14750 exit_flag=2
14751 ioerror=status
14752 RETURN
14753 ELSE
14754 IF (master) THEN
14755# ifdef CHECKSUM
14756 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax, &
14757 & fhash
14758# else
14759 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax
14760# endif
14761 END IF
14762 END IF
14763 ELSE
14764 IF (master) THEN
14765 WRITE (stdout,80) string, trim(vname(1,idvvel)), &
14766 & trim(ncname)
14767 END IF
14768 exit_flag=4
14769 IF (founderror(exit_flag, pio_noerr, &
14770 & __line__, myfile)) THEN
14771 RETURN
14772 END IF
14773 END IF
14774 END IF
14775
14776
14777
14778 DO itrc=1,nt(ng)
14779 IF (get_var(idtvar(itrc))) THEN
14780 foundit=find_string(var_name, n_var, &
14781 & trim(vname(1,idtvar(itrc))), vindex)
14782 IF (foundit) THEN
14784 my_piovar%gtype=r3dvar
14785 IF (kind(ocean(ng)%f_t).eq.8) THEN
14786 my_piovar%dkind=pio_double
14788 ELSE
14789 my_piovar%dkind=pio_real
14791 END IF
14792
14793 status=nf_fread3d(ng, idmod, ncname, piofile, &
14794 & vname(1,idtvar(itrc)), my_piovar, &
14795 & inprec, iodesc, vsize, &
14796 & lbi, ubi, lbj, ubj, 1, n(ng), &
14797 & fscl, fmin, fmax, &
14798# ifdef MASKING
14799 & grid(ng) % rmask, &
14800# endif
14801# ifdef CHECKSUM
14802 & ocean(ng) % f_t(:,:,:,itrc), &
14803 & checksum = fhash)
14804# else
14805 & ocean(ng) % f_t(:,:,:,itrc))
14806# endif
14807 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14808 IF (master) THEN
14809 WRITE (stdout,60) string, trim(vname(1,idtvar(itrc))),&
14810 & inprec, trim(ncname)
14811 END IF
14812 exit_flag=2
14813 ioerror=status
14814 RETURN
14815 ELSE
14816 IF (master) THEN
14817# ifdef CHECKSUM
14818 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
14819 & fmin, fmax, fhash
14820# else
14821 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
14822 & fmin, fmax
14823# endif
14824 END IF
14825 END IF
14826 ELSE
14827 IF (master) THEN
14828 WRITE (stdout,80) string, trim(vname(1,idtvar(itrc))), &
14829 & trim(ncname)
14830 END IF
14831 exit_flag=4
14832 IF (founderror(exit_flag, pio_noerr, &
14833 & __line__, myfile)) THEN
14834 RETURN
14835 END IF
14836 END IF
14837 END IF
14838 END DO
14839# endif
14840 END IF frc_state
14841# endif
14842
14843# if (defined RBL4DVAR || \
14844 defined rbl4dvar_ana_sensitivity || \
14845 defined rbl4dvar_fct_sensitivity || \
14846 defined tl_rbl4dvar) && \
14847 (defined adjust_boundary || \
14848 defined adjust_stflux || \
14849 defined adjust_wstress)
14850
14851
14852
14853
14854
14855 tlm_forcing: IF (model.eq.5) THEN
14856
14857
14858
14859
14860 get_adjust=.true.
14861
14862# ifdef ADJUST_BOUNDARY
14863
14864
14865
14866 IF (get_var(idsbry(isfsur)).and.get_adjust.and. &
14867 & any(lobc(:,isfsur,ng))) THEN
14868 ifield=idsbry(isfsur)
14869 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
14870 & vindex)
14871 IF (foundit) THEN
14873 my_piovar%gtype=r2dobc
14874 IF (kind(boundary(ng)%tl_zeta_obc).eq.8) THEN
14875 my_piovar%dkind=pio_double
14877 ELSE
14878 my_piovar%dkind=pio_real
14880 END IF
14881
14882 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
14883 & vname(1,ifield), my_piovar, &
14884 & inprec, iodesc, &
14885 & lbij, ubij, nbrec(ng), &
14886 & fscl, fmin, fmax, &
14887# ifdef CHECKSUM
14888 & boundary(ng) % tl_zeta_obc(:,:,:, &
14889 & tindex), &
14890 & checksum = fhash)
14891# else
14892 & boundary(ng) % tl_zeta_obc(:,:,:, &
14893 & tindex))
14894# endif
14895 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14896 IF (master) THEN
14897 WRITE (stdout,60) string, trim(vname(1,ifield)), &
14898 & inprec, trim(ncname)
14899 END IF
14900 exit_flag=2
14901 ioerror=status
14902 RETURN
14903 ELSE
14904 IF (master) THEN
14905# ifdef CHECKSUM
14906 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
14907 & fhash
14908# else
14909 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
14910# endif
14911 END IF
14912 END IF
14913 ELSE
14914 IF (master) THEN
14915 WRITE (stdout,80) string, trim(vname(1,ifield)), &
14916 & trim(ncname)
14917 END IF
14918 exit_flag=4
14919 IF (founderror(exit_flag, pio_noerr, &
14920 & __line__, myfile)) THEN
14921 RETURN
14922 END IF
14923 END IF
14924 END IF
14925
14926
14927
14928 IF (get_var(idsbry(isubar)).and.get_adjust.and. &
14929 & any(lobc(:,isubar,ng))) THEN
14930 ifield=idsbry(isubar)
14931 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
14932 & vindex)
14933 IF (foundit) THEN
14935 my_piovar%gtype=u2dobc
14936 IF (kind(boundary(ng)%tl_ubar_obc).eq.8) THEN
14937 my_piovar%dkind=pio_double
14939 ELSE
14940 my_piovar%dkind=pio_real
14942 END IF
14943
14944 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
14945 & vname(1,ifield), my_piovar, &
14946 & inprec, iodesc, &
14947 & lbij, ubij, nbrec(ng), &
14948 & fscl, fmin, fmax, &
14949# ifdef CHECKSUM
14950 & boundary(ng) % tl_ubar_obc(:,:,:, &
14951 & tindex), &
14952 & checksum = fhash)
14953# else
14954 & boundary(ng) % tl_ubar_obc(:,:,:, &
14955 & tindex))
14956# endif
14957 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
14958 IF (master) THEN
14959 WRITE (stdout,60) string, trim(vname(1,ifield)), &
14960 & inprec, trim(ncname)
14961 END IF
14962 exit_flag=2
14963 ioerror=status
14964 RETURN
14965 ELSE
14966 IF (master) THEN
14967# ifdef CHECKSUM
14968 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
14969 & fhash
14970# else
14971 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
14972# endif
14973 END IF
14974 END IF
14975 ELSE
14976 IF (master) THEN
14977 WRITE (stdout,80) string, trim(vname(1,ifield)), &
14978 & trim(ncname)
14979 END IF
14980 exit_flag=4
14981 IF (founderror(exit_flag, pio_noerr, &
14982 & __line__, myfile)) THEN
14983 RETURN
14984 END IF
14985 END IF
14986 END IF
14987
14988
14989
14990 IF (get_var(idsbry(isvbar)).and.get_adjust.and. &
14991 & any(lobc(:,isvbar,ng))) THEN
14992 ifield=idsbry(isvbar)
14993 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
14994 & vindex)
14995 IF (foundit) THEN
14997 my_piovar%gtype=v2dobc
14998 IF (kind(boundary(ng)%tl_vbar_obc).eq.8) THEN
14999 my_piovar%dkind=pio_double
15001 ELSE
15002 my_piovar%dkind=pio_real
15004 END IF
15005
15006 status=nf_fread2d_bry(ng, idmod, ncname, piofile, &
15007 & vname(1,ifield), my_piovar, &
15008 & inprec, iodesc, &
15009 & lbij, ubij, nbrec(ng), &
15010 & fscl, fmin, fmax, &
15011# ifdef CHECKSUM
15012 & boundary(ng) % tl_vbar_obc(:,:,:, &
15013 & tindex), &
15014 & checksum = fhash)
15015# else
15016 & boundary(ng) % tl_vbar_obc(:,:,:, &
15017 & tindex))
15018# endif
15019 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15020 IF (master) THEN
15021 WRITE (stdout,60) string, trim(vname(1,ifield)), &
15022 & inprec, trim(ncname)
15023 END IF
15024 exit_flag=2
15025 ioerror=status
15026 RETURN
15027 ELSE
15028 IF (master) THEN
15029# ifdef CHECKSUM
15030 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
15031 & fhash
15032# else
15033 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
15034# endif
15035 END IF
15036 END IF
15037 ELSE
15038 IF (master) THEN
15039 WRITE (stdout,80) string, trim(vname(1,ifield)), &
15040 & trim(ncname)
15041 END IF
15042 exit_flag=4
15043 IF (founderror(exit_flag, pio_noerr, &
15044 & __line__, myfile)) THEN
15045 RETURN
15046 END IF
15047 END IF
15048 END IF
15049
15050# ifdef SOLVE3D
15051
15052
15053
15054 IF (get_var(idsbry(isuvel)).and.get_adjust.and. &
15055 & any(lobc(:,isuvel,ng))) THEN
15056 ifield=idsbry(isuvel)
15057 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
15058 & vindex)
15059 IF (foundit) THEN
15061 my_piovar%gtype=u3dobc
15062 IF (kind(boundary(ng)%tl_u_obc).eq.8) THEN
15063 my_piovar%dkind=pio_double
15065 ELSE
15066 my_piovar%dkind=pio_real
15068 END IF
15069
15070 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
15071 & vname(1,ifield), my_piovar, &
15072 & inprec, iodesc, &
15073 & lbij, ubij, 1, n(ng), nbrec(ng), &
15074 & fscl, fmin, fmax, &
15075# ifdef CHECKSUM
15076 & boundary(ng) % tl_u_obc(:,:,:,:, &
15077 & tindex), &
15078 & checksum = fhash)
15079# else
15080 & boundary(ng) % tl_u_obc(:,:,:,:, &
15081 & tindex))
15082# endif
15083 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15084 IF (master) THEN
15085 WRITE (stdout,60) string, trim(vname(1,ifield)), &
15086 & inprec, trim(ncname)
15087 END IF
15088 exit_flag=2
15089 ioerror=status
15090 RETURN
15091 ELSE
15092 IF (master) THEN
15093# ifdef CHECKSUM
15094 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
15095 & fhash
15096# else
15097 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
15098# endif
15099 END IF
15100 END IF
15101 ELSE
15102 IF (master) THEN
15103 WRITE (stdout,80) string, trim(vname(1,ifield)), &
15104 & trim(ncname)
15105 END IF
15106 exit_flag=4
15107 IF (founderror(exit_flag, pio_noerr, &
15108 & __line__, myfile)) THEN
15109 RETURN
15110 END IF
15111 END IF
15112 END IF
15113
15114
15115
15116 IF (get_var(idsbry(isvvel)).and.get_adjust.and. &
15117 & any(lobc(:,isvvel,ng))) THEN
15118 ifield=idsbry(isvvel)
15119 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
15120 & vindex)
15121 IF (foundit) THEN
15123 my_piovar%gtype=v3dobc
15124 IF (kind(boundary(ng)%tl_v_obc).eq.8) THEN
15125 my_piovar%dkind=pio_double
15127 ELSE
15128 my_piovar%dkind=pio_real
15130 END IF
15131
15132 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
15133 & vname(1,ifield), my_piovar, &
15134 & inprec, iodesc, &
15135 & lbij, ubij, 1, n(ng), nbrec(ng), &
15136 & fscl, fmin, fmax, &
15137# ifdef CHECKSUM
15138 & boundary(ng) % tl_v_obc(:,:,:,:, &
15139 & tindex), &
15140 & checksum = fhash)
15141# else
15142 & boundary(ng) % tl_v_obc(:,:,:,:, &
15143 & tindex))
15144# endif
15145 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15146 IF (master) THEN
15147 WRITE (stdout,60) string, trim(vname(1,ifield)), &
15148 & inprec, trim(ncname)
15149 END IF
15150 exit_flag=2
15151 ioerror=status
15152 RETURN
15153 ELSE
15154 IF (master) THEN
15155# ifdef CHECKSUM
15156 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
15157 & fhash
15158# else
15159 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
15160# endif
15161
15162 END IF
15163 END IF
15164 ELSE
15165 IF (master) THEN
15166 WRITE (stdout,80) string, trim(vname(1,ifield)), &
15167 & trim(ncname)
15168 END IF
15169 exit_flag=4
15170 IF (founderror(exit_flag, pio_noerr, &
15171 & __line__, myfile)) THEN
15172 RETURN
15173 END IF
15174 END IF
15175 END IF
15176
15177
15178
15179 DO itrc=1,nt(ng)
15180 IF (get_var(idsbry(istvar(itrc))).and.get_adjust.and. &
15181 & any(lobc(:,istvar(itrc),ng))) THEN
15182 ifield=idsbry(istvar(itrc))
15183 foundit=find_string(var_name, n_var, trim(vname(1,ifield)), &
15184 & vindex)
15185 IF (foundit) THEN
15187 my_piovar%gtype=r3dobc
15188 IF (kind(boundary(ng)%tl_t_obc).eq.8) THEN
15189 my_piovar%dkind=pio_double
15191 ELSE
15192 my_piovar%dkind=pio_real
15194 END IF
15195
15196 status=nf_fread3d_bry(ng, idmod, ncname, piofile, &
15197 & vname(1,ifield), my_piovar, &
15198 & inprec, iodesc, &
15199 & lbij, ubij, 1, n(ng), nbrec(ng), &
15200 & fscl, fmin, fmax, &
15201# ifdef CHECKSUM
15202 & boundary(ng) % tl_t_obc(:,:,:,:, &
15203 & tindex,itrc), &
15204 & checksum = fhash)
15205# else
15206 & boundary(ng) % tl_t_obc(:,:,:,:, &
15207 & tindex,itrc))
15208# endif
15209 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15210 IF (master) THEN
15211 WRITE (stdout,60) string, trim(vname(1,ifield)), &
15212 & inprec, trim(ncname)
15213 END IF
15214 exit_flag=2
15215 ioerror=status
15216 RETURN
15217 ELSE
15218 IF (master) THEN
15219# ifdef CHECKSUM
15220 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax, &
15221 & fhash
15222# else
15223 WRITE (stdout,70) trim(vname(2,ifield)), fmin, fmax
15224# endif
15225 END IF
15226 END IF
15227 ELSE
15228 IF (master) THEN
15229 WRITE (stdout,80) string, trim(vname(1,ifield)), &
15230 & trim(ncname)
15231 END IF
15232 exit_flag=4
15233 IF (founderror(exit_flag, pio_noerr, &
15234 & __line__, myfile)) THEN
15235 RETURN
15236 END IF
15237 END IF
15238 END IF
15239 END DO
15240# endif
15241# endif
15242# ifdef ADJUST_WSTRESS
15243
15244
15245
15246 IF (get_var(idusms).and.get_adjust) THEN
15247 foundit=find_string(var_name, n_var, trim(vname(1,idusms)), &
15248 & vindex)
15249 IF (foundit) THEN
15250 scale=1.0_dp
15252 my_piovar%gtype=u2dvar
15253 IF (kind(forces(ng)%tl_ustr).eq.8) THEN
15254 my_piovar%dkind=pio_double
15256 ELSE
15257 my_piovar%dkind=pio_real
15259 END IF
15260
15261 status=nf_fread3d(ng, idmod, ncname, piofile, &
15262 & vname(1,idusms), my_piovar, &
15263 & inprec, iodesc, vsize, &
15264 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
15265 & scale, fmin, fmax, &
15266# ifdef MASKING
15267 & grid(ng) % umask, &
15268# endif
15269# ifdef CHECKSUM
15270 & forces(ng) % tl_ustr(:,:,:,tindex), &
15271 & checksum = fhash)
15272# else
15273 & forces(ng) % tl_ustr(:,:,:,tindex))
15274# endif
15275 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15276 IF (master) THEN
15277 WRITE (stdout,60) string, trim(vname(1,idusms)), &
15278 & inprec, trim(ncname)
15279 END IF
15280 exit_flag=2
15281 ioerror=status
15282 RETURN
15283 ELSE
15284 IF (master) THEN
15285# ifdef CHECKSUM
15286 WRITE (stdout,70) trim(vname(2,idusms))// &
15287 & ', adjusted tl_ustr', fmin, fmax, &
15288 & fhash
15289# else
15290 WRITE (stdout,70) trim(vname(2,idusms))// &
15291 & ', adjusted tl_ustr', fmin, fmax
15292# endif
15293 END IF
15294 END IF
15295 ELSE
15296 IF (master) THEN
15297 WRITE (stdout,80) string, trim(vname(1,idusms)), &
15298 & trim(ncname)
15299 END IF
15300 exit_flag=4
15301 IF (founderror(exit_flag, pio_noerr, &
15302 & __line__, myfile)) THEN
15303 RETURN
15304 END IF
15305 END IF
15306 END IF
15307
15308
15309
15310 IF (get_var(idvsms).and.get_adjust) THEN
15311 foundit=find_string(var_name, n_var, trim(vname(1,idvsms)), &
15312 & vindex)
15313 IF (foundit) THEN
15314 scale=1.0_dp
15316 my_piovar%gtype=v2dvar
15317 IF (kind(forces(ng)%tl_vstr).eq.8) THEN
15318 my_piovar%dkind=pio_double
15320 ELSE
15321 my_piovar%dkind=pio_real
15323 END IF
15324
15325 status=nf_fread3d(ng, idmod, ncname, piofile, &
15326 & vname(1,idvsms), my_piovar, &
15327 & inprec, iodesc, vsize, &
15328 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
15329 & scale, fmin, fmax, &
15330# ifdef MASKING
15331 & grid(ng) % vmask, &
15332# endif
15333# ifdef CHECKSUM
15334 & forces(ng) % tl_vstr(:,:,:,tindex), &
15335 & checksum = fhash)
15336# else
15337 & forces(ng) % tl_vstr(:,:,:,tindex))
15338# endif
15339 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15340 IF (master) THEN
15341 WRITE (stdout,60) string, trim(vname(1,idvsms)), &
15342 & inprec, trim(ncname)
15343 END IF
15344 exit_flag=2
15345 ioerror=status
15346 RETURN
15347 ELSE
15348 IF (master) THEN
15349# ifdef CHECKSUM
15350 WRITE (stdout,70) trim(vname(2,idvsms))// &
15351 & ', adjusted tl_vstr', fmin, fmax, &
15352 & fhash
15353# else
15354 WRITE (stdout,70) trim(vname(2,idvsms))// &
15355 & ', adjusted tl_vstr', fmin, fmax
15356# endif
15357 END IF
15358 END IF
15359 ELSE
15360 IF (master) THEN
15361 WRITE (stdout,80) string, trim(vname(1,idvsms)), &
15362 & trim(ncname)
15363 END IF
15364 exit_flag=4
15365 IF (founderror(exit_flag, pio_noerr, &
15366 & __line__, myfile)) THEN
15367 RETURN
15368 END IF
15369 END IF
15370 END IF
15371# endif
15372# if defined ADJUST_STFLUX && defined SOLVE3D
15373
15374
15375
15376 DO itrc=1,nt(ng)
15377 IF (get_var(idtsur(itrc)).and.get_adjust.and. &
15378 & lstflux(itrc,ng)) THEN
15379 foundit=find_string(var_name, n_var, &
15380 & trim(vname(1,idtsur(itrc))), vindex)
15381 IF (foundit) THEN
15382 scale=1.0_dp
15384 my_piovar%gtype=r2dvar
15385 IF (kind(forces(ng)%tl_tflux).eq.8) THEN
15386 my_piovar%dkind=pio_double
15388 ELSE
15389 my_piovar%dkind=pio_real
15391 END IF
15392
15393 status=nf_fread3d(ng, idmod, ncname, piofile, &
15394 & vname(1,idtsur(itrc)), my_piovar, &
15395 & inprec, iodesc, vsize, &
15396 & lbi, ubi, lbj, ubj, 1, nfrec(ng), &
15397 & scale, fmin, fmax, &
15398# ifdef MASKING
15399 & grid(ng) % rmask, &
15400# endif
15401# ifdef CHECKSUM
15402 & forces(ng)% tl_tflux(:,:,:, &
15403 & tindex,itrc), &
15404 & checksum = fhash)
15405# else
15406 & forces(ng)% tl_tflux(:,:,:, &
15407 & tindex,itrc))
15408# endif
15409 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15410 IF (master) THEN
15411 WRITE (stdout,60) string, trim(vname(1,idtsur(itrc))),&
15412 & inprec, trim(ncname)
15413 END IF
15414 exit_flag=2
15415 ioerror=status
15416 RETURN
15417 ELSE
15418 IF (master) THEN
15419# ifdef CHECKSUM
15420 WRITE (stdout,70) trim(vname(2,idtsur(itrc)))// &
15421 & ', adjusted tl_tflux', fmin, fmax, &
15422 & fhash
15423# else
15424 WRITE (stdout,70) trim(vname(2,idtsur(itrc)))// &
15425 & ', adjusted tl_tflux', fmin, fmax
15426# endif
15427 END IF
15428 END IF
15429 ELSE
15430 IF (master) THEN
15431 WRITE (stdout,80) string, trim(vname(1,idtsur(itrc))), &
15432 & trim(ncname)
15433 END IF
15434 exit_flag=4
15435 IF (founderror(exit_flag, pio_noerr, &
15436 & __line__, myfile)) THEN
15437 RETURN
15438 END IF
15439 END IF
15440 END IF
15441 END DO
15442# endif
15443 END IF tlm_forcing
15444# endif
15445
15446# if defined TIME_CONV
15447
15448
15449
15450
15451
15452
15453 tcs_state: IF (model.eq.6) THEN
15454
15455
15456
15457 nrecfrc(ng)=nrec
15458
15459
15460
15462 & rclock%DateNumber, forcetime(ng:), &
15463 & piofile = piofile, &
15464 & start = (/inprec/), &
15465 & total = (/1/))
15466 IF (founderror(exit_flag, noerror, __line__, myfile)) RETURN
15467
15468
15469
15470 IF (get_var(idfsur)) THEN
15471 foundit=find_string(var_name, n_var, trim(vname(1,idfsur)), &
15472 & vindex)
15473 IF (foundit) THEN
15475 my_piovar%gtype=r2dvar
15476 IF (kind(ocean(ng)%tl_zeta).eq.8) THEN
15477 my_piovar%dkind=pio_double
15479 ELSE
15480 my_piovar%dkind=pio_real
15482 END IF
15483
15484 status=nf_fread2d(ng, idmod, ncname, piofile, &
15485 & vname(1,idfsur), my_piovar, &
15486 & inprec, iodesc, vsize, &
15487 & lbi, ubi, lbj, ubj, &
15488 & fscl, fmin, fmax, &
15489# ifdef MASKING
15490 & grid(ng) % rmask, &
15491# endif
15492# ifdef CHECKSUM
15493 & ocean(ng) % tl_zeta(:,:,tindex), &
15494 & checksum = fhash)
15495# else
15496 & ocean(ng) % tl_zeta(:,:,tindex))
15497# endif
15498 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15499 IF (master) THEN
15500 WRITE (stdout,60) string, trim(vname(1,idfsur)), &
15501 & inprec, trim(ncname)
15502 END IF
15503 exit_flag=2
15504 ioerror=status
15505 RETURN
15506 ELSE
15507 IF (master) THEN
15508# ifdef CHECKSUM
15509 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax, &
15510 & fhash
15511# else
15512 WRITE (stdout,70) trim(vname(2,idfsur)), fmin, fmax
15513# endif
15514
15515 END IF
15516 END IF
15517 ELSE
15518 IF (master) THEN
15519 WRITE (stdout,80) string, trim(vname(1,idfsur)), &
15520 & trim(ncname)
15521 END IF
15522 exit_flag=4
15523 IF (founderror(exit_flag, pio_noerr, &
15524 & __line__, myfile)) THEN
15525 RETURN
15526 END IF
15527 END IF
15528 END IF
15529
15530# ifndef SOLVE3D
15531
15532
15533
15534 IF (get_var(idubar)) THEN
15535 foundit=find_string(var_name, n_var, trim(vname(1,idubar)), &
15536 & vindex)
15537 IF (foundit) THEN
15539 my_piovar%gtype=u2dvar
15540 IF (kind(ocean(ng)%tl_ubar).eq.8) THEN
15541 my_piovar%dkind=pio_double
15543 ELSE
15544 my_piovar%dkind=pio_real
15546 END IF
15547
15548 status=nf_fread2d(ng, idmod, ncname, piofile, &
15549 & vname(1,idubar), my_piovar, &
15550 & inprec, iodesc, vsize, &
15551 & lbi, ubi, lbj, ubj, &
15552 & fscl, fmin, fmax, &
15553# ifdef MASKING
15554 & grid(ng) % umask, &
15555# endif
15556# ifdef CHECKSUM
15557 & ocean(ng) % tl_ubar(:,:,tindex), &
15558 & checksum = fhash)
15559# else
15560 & ocean(ng) % tl_ubar(:,:,tindex))
15561# endif
15562 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15563 IF (master) THEN
15564 WRITE (stdout,60) string, trim(vname(1,idubar)), &
15565 & inprec, trim(ncname)
15566 END IF
15567 exit_flag=2
15568 ioerror=status
15569 RETURN
15570 ELSE
15571 IF (master) THEN
15572# ifdef CHECKSUM
15573 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax, &
15574 & fhash
15575# else
15576 WRITE (stdout,70) trim(vname(2,idubar)), fmin, fmax
15577# endif
15578 END IF
15579 END IF
15580 ELSE
15581 IF (master) THEN
15582 WRITE (stdout,80) string, trim(vname(1,idubar)), &
15583 & trim(ncname)
15584 END IF
15585 exit_flag=4
15586 IF (founderror(exit_flag, pio_noerr, &
15587 & __line__, myfile)) THEN
15588 RETURN
15589 END IF
15590 END IF
15591 END IF
15592
15593
15594
15595 IF (get_var(idvbar)) THEN
15596 foundit=find_string(var_name, n_var, trim(vname(1,idvbar)), &
15597 & vindex)
15598 IF (foundit) THEN
15600 my_piovar%gtype=v2dvar
15601 IF (kind(ocean(ng)%tl_vbar).eq.8) THEN
15602 my_piovar%dkind=pio_double
15604 ELSE
15605 my_piovar%dkind=pio_real
15607 END IF
15608
15609 status=nf_fread2d(ng, idmod, ncname, piofile, &
15610 & vname(1,idvbar), my_piovar, &
15611 & inprec, iodesc, vsize, &
15612 & lbi, ubi, lbj, ubj, &
15613 & fscl, fmin, fmax, &
15614# ifdef MASKING
15615 & grid(ng) % vmask, &
15616# endif
15617# ifdef CHECKSUM
15618 & ocean(ng) % tl_vbar(:,:,tindex), &
15619 & checksum = fhash)
15620# else
15621 & ocean(ng) % tl_vbar(:,:,tindex))
15622# endif
15623 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15624 IF (master) THEN
15625 WRITE (stdout,60) string, trim(vname(1,idvbar)), &
15626 & inprec, trim(ncname)
15627 END IF
15628 exit_flag=2
15629 ioerror=status
15630 RETURN
15631 ELSE
15632 IF (master) THEN
15633# ifdef CHECKSUM
15634 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax, &
15635 & fhash
15636# else
15637 WRITE (stdout,70) trim(vname(2,idvbar)), fmin, fmax
15638# endif
15639 END IF
15640 END IF
15641 ELSE
15642 IF (master) THEN
15643 WRITE (stdout,80) string, trim(vname(1,idvbar)), &
15644 & trim(ncname)
15645 END IF
15646 exit_flag=4
15647 IF (founderror(exit_flag, pio_noerr, &
15648 & __line__, myfile)) THEN
15649 RETURN
15650 END IF
15651 END IF
15652 END IF
15653# endif
15654# ifdef SOLVE3D
15655
15656
15657
15658 IF (get_var(iduvel)) THEN
15659 foundit=find_string(var_name, n_var, trim(vname(1,iduvel)), &
15660 & vindex)
15661 IF (foundit) THEN
15663 my_piovar%gtype=u3dvar
15664 IF (kind(ocean(ng)%tl_u).eq.8) THEN
15665 my_piovar%dkind=pio_double
15667 ELSE
15668 my_piovar%dkind=pio_real
15670 END IF
15671
15672 status=nf_fread3d(ng, idmod, ncname, piofile, &
15673 & vname(1,iduvel), my_piovar, &
15674 & inprec, iodesc, vsize, &
15675 & lbi, ubi, lbj, ubj, 1, n(ng), &
15676 & fscl, fmin, fmax, &
15677# ifdef MASKING
15678 & grid(ng) % umask, &
15679# endif
15680# ifdef CHECKSUM
15681 & ocean(ng) % tl_u(:,:,:,tindex), &
15682 & checksum = fhash)
15683# else
15684 & ocean(ng) % tl_u(:,:,:,tindex))
15685# endif
15686 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15687 IF (master) THEN
15688 WRITE (stdout,60) string, trim(vname(1,iduvel)), &
15689 & inprec, trim(ncname)
15690 END IF
15691 exit_flag=2
15692 ioerror=status
15693 RETURN
15694 ELSE
15695 IF (master) THEN
15696# ifdef CHECKSUM
15697 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax, &
15698 & fhash
15699# else
15700 WRITE (stdout,70) trim(vname(2,iduvel)), fmin, fmax
15701# endif
15702 END IF
15703 END IF
15704 ELSE
15705 IF (master) THEN
15706 WRITE (stdout,80) string, trim(vname(1,iduvel)), &
15707 & trim(ncname)
15708 END IF
15709 exit_flag=4
15710 IF (founderror(exit_flag, pio_noerr, &
15711 & __line__, myfile)) THEN
15712 RETURN
15713 END IF
15714 END IF
15715 END IF
15716
15717
15718
15719 IF (get_var(idvvel)) THEN
15720 foundit=find_string(var_name, n_var, trim(vname(1,idvvel)), &
15721 & vindex)
15722 IF (foundit) THEN
15724 my_piovar%gtype=v3dvar
15725 IF (kind(ocean(ng)%tl_v).eq.8) THEN
15726 my_piovar%dkind=pio_double
15728 ELSE
15729 my_piovar%dkind=pio_real
15731 END IF
15732
15733 status=nf_fread3d(ng, idmod, ncname, piofile, &
15734 & vname(1,idvvel), my_piovar, &
15735 & inprec, iodesc, vsize, &
15736 & lbi, ubi, lbj, ubj, 1, n(ng), &
15737 & fscl, fmin, fmax, &
15738# ifdef MASKING
15739 & grid(ng) % vmask, &
15740# endif
15741# ifdef CHECKSUM
15742 & ocean(ng) % tl_v(:,:,:,tindex), &
15743 & checksum = fhash)
15744# else
15745 & ocean(ng) % tl_v(:,:,:,tindex))
15746# endif
15747 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15748 IF (master) THEN
15749 WRITE (stdout,60) string, trim(vname(1,idvvel)), &
15750 & inprec, trim(ncname)
15751 END IF
15752 exit_flag=2
15753 ioerror=status
15754 RETURN
15755 ELSE
15756 IF (master) THEN
15757# ifdef CHECKSUM
15758 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax, &
15759 & fhash
15760# else
15761 WRITE (stdout,70) trim(vname(2,idvvel)), fmin, fmax
15762# endif
15763 END IF
15764 END IF
15765 ELSE
15766 IF (master) THEN
15767 WRITE (stdout,80) string, trim(vname(1,idvvel)), &
15768 & trim(ncname)
15769 END IF
15770 exit_flag=4
15771 IF (founderror(exit_flag, pio_noerr, &
15772 & __line__, myfile)) THEN
15773 RETURN
15774 END IF
15775 END IF
15776 END IF
15777
15778
15779
15780 DO itrc=1,nt(ng)
15781 IF (get_var(idtvar(itrc))) THEN
15782 foundit=find_string(var_name, n_var, &
15783 & trim(vname(1,idtvar(itrc))), vindex)
15784 IF (foundit) THEN
15786 my_piovar%gtype=r3dvar
15787 IF (kind(ocean(ng)%tl_t).eq.8) THEN
15788 my_piovar%dkind=pio_double
15790 ELSE
15791 my_piovar%dkind=pio_real
15793 END IF
15794
15795 status=nf_fread3d(ng, idmod, ncname, piofile, &
15796 & vname(1,idtvar(itrc)), my_piovar, &
15797 & inprec, iodesc, vsize, &
15798 & lbi, ubi, lbj, ubj, 1, n(ng), &
15799 & fscl, fmin, fmax, &
15800# ifdef MASKING
15801 & grid(ng) % rmask, &
15802# endif
15803# ifdef CHECKSUM
15804 & ocean(ng) % tl_t(:,:,:,tindex,itrc), &
15805 & checksum = fhash)
15806# else
15807 & ocean(ng) % tl_t(:,:,:,tindex,itrc))
15808# endif
15809 IF (founderror(status, pio_noerr, __line__, myfile)) THEN
15810 IF (master) THEN
15811 WRITE (stdout,60) string, trim(vname(1,idtvar(itrc))),&
15812 & inprec, trim(ncname)
15813 END IF
15814 exit_flag=2
15815 ioerror=status
15816 RETURN
15817 ELSE
15818 IF (master) THEN
15819# ifdef CHECKSUM
15820 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
15821 & fmin, fmax, fhash
15822# else
15823 WRITE (stdout,70) trim(vname(2,idtvar(itrc))), &
15824 & fmin, fmax
15825# endif
15826 END IF
15827 END IF
15828 ELSE
15829 IF (master) THEN
15830 WRITE (stdout,80) string, trim(vname(1,idtvar(itrc))), &
15831 & trim(ncname)
15832 END IF
15833 exit_flag=4
15834 IF (founderror(exit_flag, pio_noerr, &
15835 & __line__, myfile)) THEN
15836 RETURN
15837 END IF
15838 END IF
15839 END IF
15840 END DO
15841# endif
15842 END IF tcs_state
15843# endif
15844
15845
15846
15847
15848
15850
15851# ifdef PROFILE
15852
15853
15854
15855 CALL wclock_off (ng, idmod, 80, __line__, myfile)
15856# endif
15857
15858 10 FORMAT (/,2x,'GET_STATE_PIO - ',a,'unable to open input NetCDF', &
15859 & ' file: ',a)
15860 20 FORMAT (/,2x,'GET_STATE_PIO - ',a,'Warning - NetCDF global', &
15861 & ' attribute:',a, &
15862 & /,19x,'for lateral boundary conditions not checked', &
15863 & /,19x,'in file: ',a)
15864 30 FORMAT (/,2x,'GET_STATE_PIO - ',a,'requested input time', &
15865 & ' record = ',i0,/,19x,'not found in input NetCDF: ',a,/, &
15866 & 19x,'number of available records = ',i0)
15867 40 FORMAT (/,2x,'GET_STATE_PIO - ',a,a,t75,a, &
15868 & /,22x,'(Grid ',i2.2,a,i4.4, ', t = ',a, &
15869 & ', File: ',a, ', Rec=',i4.4,', Index=',i1,')')
15870 50 FORMAT (/,2x,'GET_STATE_PIO - ',a,a,t75,a, &
15871 & /,22x,'(Grid ',i2.2, ', t = ',a, &
15872 & ', File: ',a,', Rec=',i4.4, ', Index=',i1,')')
15873 60 FORMAT (/,2x,'GET_STATE_PIO - ',a,'error while reading', &
15874 & ' variable: ',a,2x,'at time record = ',i0, &
15875 & /,19x,'in input NetCDF file: ',a)
15876#ifdef CHECKSUM
15877 70 FORMAT (19x,'- ',a,/,22x,'(Min = ',1p,e15.8, &
15878 & ' Max = ',1p,e15.8,' CheckSum = ',i0,')')
15879#else
15880 70 FORMAT (19x,'- ',a,/,22x,'(Min = ',1p,e15.8, &
15881 & ' Max = ',1p,e15.8,')')
15882#endif
15883 75 FORMAT (19x,'- ',a,/,22x,'(Min = ',1p,e15.8, &
15884 & ' Max = ',1p,e15.8,')')
15885 80 FORMAT (/,2x,'GET_STATE_PIO - ',a,'cannot find variable: ',a, &
15886 & /,19x,'in input NetCDF file: ',a)
15887
15888 RETURN
type(io_desc_t), dimension(:), pointer iodesc_sp_w3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_tkevar
type(io_desc_t), dimension(:), pointer iodesc_sp_trcvar
type(io_desc_t), dimension(:), pointer iodesc_dp_b3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_u3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_ubar
type(var_desc_t), dimension(:), pointer var_desc
type(io_desc_t), dimension(:), pointer iodesc_sp_tkevar
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_ruvel
integer, parameter pio_frst
type(io_desc_t), dimension(:), pointer iodesc_dp_rzeta
type(io_desc_t), dimension(:), pointer iodesc_sp_rzeta
type(io_desc_t), dimension(:), pointer iodesc_sp_u3dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_uvel
subroutine, public pio_netcdf_inq_var(ng, model, ncname, piofile, myvarname, searchvar, piovar, nvardim, nvaratt)
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_b3dvar
subroutine, public pio_netcdf_close(ng, model, piofile, ncname, lupdate)
type(io_desc_t), dimension(:), pointer iodesc_sp_rvvel
type(io_desc_t), dimension(:), pointer iodesc_sp_u2dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_rvvel
subroutine, public pio_netcdf_open(ng, model, ncname, omode, piofile)
type(io_desc_t), dimension(:), pointer iodesc_dp_u2dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_vvel
type(io_desc_t), dimension(:), pointer iodesc_dp_rvbar
type(io_desc_t), dimension(:), pointer iodesc_dp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_vbar
type(io_desc_t), dimension(:), pointer iodesc_dp_vbar
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dfrc
type(io_desc_t), dimension(:), pointer iodesc_sp_rvbar
type(io_desc_t), dimension(:), pointer iodesc_dp_w3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_v2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_vvel
type(io_desc_t), dimension(:), pointer iodesc_sp_ubar
type(io_desc_t), dimension(:), pointer iodesc_sp_uvel
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_r3dvar
type(io_desc_t), dimension(:), pointer iodesc_dp_r2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_ruvel
type(io_desc_t), dimension(:), pointer iodesc_dp_r3dobc
type(io_desc_t), dimension(:), pointer iodesc_dp_rubar
type(io_desc_t), dimension(:), pointer iodesc_sp_rubar
type(io_desc_t), dimension(:), pointer iodesc_sp_v3dobc
type(io_desc_t), dimension(:), pointer iodesc_sp_v2dvar
type(io_desc_t), dimension(:), pointer iodesc_sp_r2dfrc
type(io_desc_t), dimension(:), pointer iodesc_dp_trcvar